2017-03-08 1 views
0

Ich bin auf diesem einen ratlos. Ich kann ein Array von IDs suchen, aber ich möchte die Rückseite suchen. Ich habe Modelle mit Listen von IDs als "with_ids" -Attribut und möchte ähnlich wie mongo db suchen, wo ID in diesem Array von IDs ist. Zum BeispielVerwenden Larawel 5.4 Query Builder mit einem Array (Json serialisiert) Attribut

db.conversations.find({ with_ids: { $in: [id] } }) 

Wie mache ich das mit Laravel und mysql/Eloquent?

$conversations = Conversation::with('messages.user')->where('with_ids', $id)->orWhere('created_by', $id)->get(); 

es ist das wo ('with_ids', $ id) kann ich nicht herausfinden ... Irgendwelche Vorschläge ??

Um weiter zu klären: Ich muss herausfinden, ob der Benutzer an anderen Unterhaltungen sowie an denen beteiligt ist, die er erstellt hat. Die with_ids ist ein serialisiertes json-Array für zB [1,2,23,12] Wie suche ich innerhalb des Array-Attributs?

+0

Ich denke, Ihre Abfrage sollte so funktionieren wie es ist. Was gibt es zurück? – EddyTheDove

+0

Leeres Array ... nichts Conversation :: with ('messages.user') -> wo ('with_ids', $ id) -> get(); – IamLasse

+0

oh warte. Wo ist 'mit_ids'? im Gespräch oder in Nachrichten? – EddyTheDove

Antwort

0

Nicht sicher, ich verstehe. Hast du es mit whereIn() versucht?

$conversations = Conversation::with('messages.user') 
->whereIn('with_ids', [$id]) 
->orWhere('created_by', $id) 
->get(); 

bearbeiten

$conversations = Conversation::with('messages.user', function($query) { 
    $query->where('id', $id); // user_id ? 
}) 
->orWhere('created_by', $id) 
->get(); 
+0

Ich brauche es anders herum. Ich habe eine ID, die ich überprüfen muss, ob es in der Liste der IDs "with_ids" vorhanden ist Ich muss herausfinden, ob der Benutzer an anderen Unterhaltungen als an den von ihm erstellten beteiligt ist. z.B. Die With_ids ist eine Liste von Benutzer-IDs. with_ids ist ein serialisiertes json-Array für zB [1,2,23,12] wie suche ich innerhalb des Array-Attributs? – IamLasse

+0

Hast du das zumindest versucht? Bitte mach und lass 'sehen. – EddyTheDove

0

Nach viel Graben fand ich endlich eine Lösung. FIND_IN_SET in einer whereRaw-Abfrage hat den Zweck erfüllt. Falls jemand anderes auf dieses Problem gestoßen ist, hoffe es, dass es hilft.

es ist nicht schön, weil aus irgendeinem Grund Anführungszeichen abgezogen werden müssen, aus

Conversation::where('created_by', $id)->orWhereRaw("FIND_IN_SET(?, REPLACE(REPLACE(REPLACE(with_ids, '\"', ''), '[', ''), ']','')) > 0", $id)->get() 

, dass die letzte Abfrage ist aggregierte Gespräche zu bekommen, wo Benutzer entweder erstellt oder Teil.