Quindi ho qualche problema a capire come eseguire una chiamata mysql in stile feed e non so se si tratta di un problema eloquente o di un problema mysql. Sono sicuro che sia possibile in entrambi e ho solo bisogno di aiuto.Laravel Eloquent Join vs Inner Join?
Quindi ho un utente e vanno alla loro pagina di feed, in questa pagina mostra cose dai loro amici (voti di amici, commenti di amici, aggiornamenti di stato di amici). Quindi dire che ho Tom, Tim e Taylor come i miei amici e ho bisogno di ottenere tutti i loro voti, commenti, aggiornamenti di stato. Come faccio a fare questo? Ho una lista di tutti gli amici per numero di identificazione, e ho tabelle per ciascuno degli eventi (voti, commenti, aggiornamenti di stato) che hanno l'ID memorizzato in esso per ricollegarsi all'utente. Quindi, come posso ottenere tutte queste informazioni contemporaneamente in modo che possa visualizzarle in un feed sotto forma di.
Tim ha commentato: "Cool"
Taylor ha detto "Woot primo aggiornamento di stato ~!"
Taylor Votato "concorso Migliore mai"
Modifica @damiani Così, dopo aver fatto il modello cambia Ho codice come questo, e lo fa ritornare le righe corrette
$friends_votes = $user->friends()->join('votes', 'votes.userId', '=', 'friend.friendId')->orderBy('created_at', 'DESC')->get(['votes.*']);
$friends_comments = $user->friends()->join('comments', 'comments.userId', '=', 'friend.friendId')->orderBy('created_at', 'DESC')->get(['comments.*']);
$friends_status = $user->friends()->join('status', 'status.userId', '=', 'friend.friendId')->orderBy('created_at', 'DESC')->get(['status.*']);
ma vorrei tutto per succedere in una volta, questo perché mysql che ordina migliaia di record in ordine è 100 volte più veloce di php che prende 3 liste, unendole e poi facendole. Qualche idea?
Come stai memorizzando questo 'elenco di tutti gli amici per numero ID' .... si trova in una tabella' amici' o è un elenco separato da virgole in una colonna nella tabella 'utenti'? In quest'ultimo caso, normalizzare il database in modo da poter utilizzare le relazioni del modello (hasManyThrough()) –
È possibile creare una vista nel db e un 'modello Eloquent per esso. Quindi prendi tutti gli eventi che desideri. Altrimenti potresti usare le relazioni 'polimorfiche': laravel.com/docs/eloquent#polymorphic-relations –
per favore non aggiungere la risposta giusta alla domanda originale, diventa tutto sfocato quindi – challet