Laravel 5 hasMany relation sur deux colonnes
Est-il possible d'avoir un hasMany relation sur deux colonnes?
Mon tableau a deux colonnes, user_id
et related_user_id
.
Je veux que mon rapport à correspondre à l'une des colonnes.
Dans mon modèle, j'ai
public function userRelations()
{
return $this->hasMany('App\UserRelation');
}
Qui exécute la requête: select * from user_relations where user_relations.user_id in ('17', '18')
.
La requête j'ai besoin d'exécuter est:
select * from user_relations where user_relations.user_id = 17 OR user_relations.related_user_id = 17
EDIT:
Je suis en utilisant impatient de chargement et je pense que cela va affecter la façon dont il aura à travailler.
$cause = Cause::with('donations.user.userRelations')->where('active', '=', 1)->first();
- C'est peut-être préférable de simplement filtrer les
UserRelation
modèle par ces deux colonnes?
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que c'est possible de faire exactement ce que vous demandez.
Je pense que vous devez les traiter comme des relations séparées et puis créer une nouvelle méthode sur le modèle de récupérer une collection à la fois.
De cette façon, vous obtenez toujours le bénéfice de l'désireux de chargement et de la relation mise en cache sur le modèle.
Compoships ajoute le support du multi-colonnes relations dans Laravel 5 est Éloquent.
Il vous permet de spécifier des relations à l'aide de la syntaxe suivante:
où les deux colonnes doivent correspondre.
relation to match either of the columns
, pas les deux. Il peut encore être utile pour les autres utilisateurs du si. Peut-être vous devriez juste clearify dans votre réponse qu'il a pour correspondre à toutes les colonnes de travailler.Si quelqu'un a atterri ici comme moi à cause de google:
Comme ni merge() (comme suggéré ci-dessus), ni push() (comme l'a suggéré ici) permettent désireux de chargement (et d'autres relation agréable fonctionnalités), la discussion est toujours en cours et se poursuit dans un nouveau thread, voir ici: Laravel Éloquent Inner Join sur l'Auto-Table de référence
J'ai proposé une solution il y, d'autres idées et contributions sont les bienvenues.