Éloquent avec imbriqué whereHas

Actuellement, j'ai cette whereHas dans une collection de mon modèle:

$query = self::whereHas('club', function($q) use ($search)
{
    $q->whereHas('owner', function($q) use ($search)
    {
        $q->where('name', 'LIKE', '%'. $search .'%');
    });

});

J'étais sous l'impression que le code ci-dessus peut être en tant que tel:

$query = self::whereHas('club.owner', function($q) use ($search)
{
    $q->where('name', 'LIKE', '%'. $search .'%');    
});

Je suis conscient que c'est déjà beaucoup de pouvoir, mais même alors, si j'ai une relation imbriquée 5 niveaux de profondeur, les choses vont devenir laid.

Mise à jour:

Comme indiqué dans les commentaires, j'ai fini par ne pas faire de ma question claire, je m'en excuse.

Je vais essayer d'utiliser un exemple simple, considérons $owner->club->membership->product->package, maintenant, de propriétaires, je recherche un certain paquet, il serait quelque chose comme ceci:

$query = self::whereHas('club', function($q) use ($search)
{
    $q->whereHas('membership', function($q) use ($search)
    {
        $q->whereHas('product', function($q) use ($search)
        {
            $q->whereHas('package', function($q) use ($search)
            {
                $q->where('alias', 'LIKE', '%'. $search .'%');
            });//package
        });//product
    });//membership
});//club

Est-ce correct? Est-il un raccourci?

  • Quel est le problème et ce que vous attendez?
  • Si votre question est: pourquoi ne puis-je pas utiliser de club".propriétaire", comme le terrain?
  • Parce que chaque niveau d'imbrication exécute une autre requête avec un where id IN () de la clause pour la relation imbriquée. Vous souhaitez rechercher tous les modèles associés avec COMME clause?
  • J'ai mis à jour la question. @deczo Est-il possible de faire ce que vous dites? Ici, je suis juste en train de chercher dans un seul modèle. Mais si je voulais faire comme vous le dites?
  • ce sera résultat en plusieurs sous-requêtes EXISTENT(), mauvaise idée.
  • Il suffit de lire la accepté de répondre.

InformationsquelleAutor user2094178 | 2014-04-18