2017-07-14 1 views
0

J'ai deux tables liées par un tableau croisé dynamique (avec une migration personnalisée):Laravel, Eloquent: Fetch toutes les entrées de plusieurs à-plusieurs

Table d'intérêt:

ID | label 

Personne tableau:

ID | label 

Table PersonHasInterest (migration personnalisée):

InterestID | PersonID | notes 

Comment puis-je obtenir tous les enregistrements du tableau croisé dynamique (avec les personnes et les intérêts joints)? Je ne veux pas obtenir tous les intérêts d'une personne ou de toutes les personnes qui ont un intérêt mais toutes les entrées (avec jointures) du tableau croisé dynamique.

+0

Définir un modèle pour le tableau croisé dynamique puis appelez 'PersonHasInterest :: tous()' –

+0

mais comment? définir un modèle pour un pivot? –

+0

De la même manière que vous le faites pour un modèle, vous pouvez spécifier l'attribut de table –

Répondre

0

Même si Pivot étend Model il est impossible d'appeler les fonctions du modèle standard sur un Pivot -object. Issue on Github.

Ce que je suis venu utilise le DB-Facade pour exécuter une instruction select, comme ceci:

DB::table('person_has_interest') 
    ->join('interest', 'person_has_interest.interest_id', '=', 'interest.id') 
    ->join('person', 'person_has_interest.person_id', '=', 'person.id') 
    ->get(); // further manipulation like select possible 
0

Essayez de définir un modèle de pivot comme celui-ci:

<?php 

... 
use Illuminate\Database\Eloquent\Relations\Pivot; 
... 
class PersonHasInterest extends Pivot 
{ 
    protected $table = '...'; // table name 
} 

, utilisez-le: PersonHasInterest::all();

+0

Ce n'est pas possible. Vous ne pouvez pas instancier le pivot avec cette approche. Voir https://github.com/laravel/framework/issues/17770 –