Outils pour utilisateurs

Outils du site


devweb:laravel:eloquent:champs_meme_nom (lu 52014 fois)

Plusieurs champs avec le même nom

Avec Eloquent, si vous faites une requête avec un join sur 2 tables qui ont chacune un champ id, alors vous ne retrouverez plus qu’un seul champ id qui comportera la valeur de la 1ère table qui viendra.

Exemple:

Produit::leftJoin('menus', 'produits.menu_id', '=', 'menus.id')
                                      ->orderBy('menus.ordre')
                                      ->orderBy('produits.ordre')
                                      ->get();

Si on fait un foreach sur ce résultat et que l’on prend un enregistrement, on se rend compte que le id renvoie la valeur id de la table menu, tout comme ordre.

C’est super chiant du fait que l’on veut la valeur de la table produit. Heureusement en fouillant le code source on arrive à voir que get() accepte un array avec le contenu d’un select, ce qui donne

Produit::leftJoin('menus', 'produits.menu_id', '=', 'menus.id')
                                      ->orderBy('menus.ordre')
                                      ->orderBy('produits.ordre')
                                      ->get(array('produits.*'));

Dans ce cas la, id et ordre sont bien issues de produit.

La doc est vraiment trop légère malheureusement…

devweb/laravel/eloquent/champs_meme_nom.txt · Dernière modification: 25-05-2015 22:27 de edmc73