Bonjour,

Voila j'aimerai savoir comment faire pour conditionner un sélect avec le résultat de la différence entre 2 column
exemple

Campagne::find($campagne_id)->competences()
        ->where(DB::raw("competences.lft - competences.rgt"), '=', 1)
        ->addSelect(DB::raw("COUNT(competences.id) as total"))->first();

j'ai une erreur
Column not found: 1054 Champ 'competences.lft - competences.rgt' inconnu dans where clause

Merciiii

2 réponses


Bonjour,
La fonction "Where" peut prendre une closure comme paramètre, exemple (https://laravel.com/docs/5.8/queries#where-clauses) :

DB::table("users")->where('id', function($query) {
    $query->select('id')->where('name', 'John Doe')->from('users');
})->get();

Tu peux aussi utiliser les fonctions "SelectRaw()" et "WhereRaw()".

Ta requête commence par "Campagne::find($campagne_id)->competences()", dès que tu as fait appel à ta relation "competences", normalement tu n'es plus dans une requête mais dans une collection et les fonctions "DB::raw()" et "addSelect()" ne font pas parties des collections (https://laravel.com/docs/5.8/collections).

En espérant que ceci puisse t'aider.

I just want to thank to share your information and your website