Bonjour,

Je voudrais savoir si il est possible d'effectuer un select dans une vue dans ma base mysql. Si oui comment faire ?
J'ai testé :

DB::view (n'existe pas)
DB::select('select * from v_commande'); (laravel recherche une table)

Merci d'avance.

4 réponses


shadoo
Réponse acceptée

Ta vue devient une tablea comme une autre dans ta base de donnée. Ce qui fait que tu peux requêter exactement comme tu le ferais dans pour une autre table.
Par contre il faut que tu passes par DB::raw(..) pour construire ta requête et taper dans la table.
Si on voulait faire proprement on ferait une class model qui étendrait eloquent dédié aux vues.
Mais si tu n'en as pas beaucoup tu peux très bien créer un model dans un sous dossier nommé View/ où dans ce dossier ton model porterait le nom de la ta table view mysql.
Et dedans tes méthodes comporteraient des requêtes avec DB::raw et non plus l'utilisation de l'ORM Eloquent.
A ne pas confondre.
Donc utilise le Query builder de Eloquent et non pas l'orm pour taper des selects dans les views mysql (les views sont essentiellements pour des selects et pas autres choses ne pas l'oublier).

Utilise le DB::Table({nom de la table}) plutôt que le DB::select(...) qui t'oblige à taper du sql natif, en utilisant le DB::table() et DB::raw() (pour certain cas mais tu n'en as pas l'utilité en principe sur des views) cela te permet de garder la possibilité de changer de driver sql sans avoir à modifier tes requêtes en fonction de la base de donnée.

Pourquoi avoir besoin de faire une requete dans une vue ? Normallement, toutes tes données partent du controllers pour arriver à la vue !

@PallMallShow je pense qu'ici on parle de vue SQL pas de vues en html

Autant pour moi !