J'ai une relation et une fonction dans mon User.php;
class User extends Model { public function children() { return $this->hasMany(self::class, 'level1_user_id') ->select(['id', 'first_name', 'last_name', 'level1_user_id']); } public function grandchildren() { return $this->children()->with(['grandchildren']); } }
Voici mon contrôleur.php :
public function allChildren() { $user = User::where('id', 3)->with(['grandchildren' => function ($query) { $query->where('first_name', 'rose'); } ])->first(); return $user; }
Lorsque j'ajoute le petit-enfant, il renvoie tous les nœuds de cet arbre ; Je veux attribuer une condition et obtenir le nœud portant le nom « rose » mais je ne peux le faire que pour le premier niveau, comment accéder à cette requête :
$query->where('first_name', 'rose');
Est-il également possible de définir une requête pour les autres dans la fonction de mon petit-enfant dans User.php ?
Je veux faire quelque chose comme ceci :
class User extends Model { public function children() { return $this->hasMany(self::class, 'level1_user_id') ->select(['id', 'first_name', 'last_name', 'level1_user_id']); } public function grandchildren(Query $inputQuery) { return $this->children()->with(['grandchildren' => function ($query) use ($inputQuery) { $query->$inputQuery; }]); } }
Je pense que vous recherchez hasManyThrough