es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El conteo con selectRaw de Laravel no está funcionando cuando se utiliza la cláusula where.

Me gustaría obtener los elementos donde useditems < limit pero también obtengo useditems >= limit. Intenté usar “having” pero tampoco funcionó.

public function getAllowedItems()
{
    $items = Item::leftJoin('runners_items', 'runners_items.item_id', 'items.id')
        ->leftJoin('subrace_items', 'subrace_items.item_id', 'items.id')
        ->where('subrace_items.sub_race_id', $this->id)
        ->select('items.*', DB::raw('count(items.id)-1 as used_items'))
        ->where('items.limit', '>', 'used_items')
        ->orWhere('items.limit', 0)
        ->groupBy('items.id')->get();
    dd($items);
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener elementos donde used_items < límite pero también obtener used_items >= límite, puede modificar la consulta usando having en lugar de where. La condición para used_items < límite seguirá siendo una cláusula where, mientras que la condición para used_items >= límite se moverá a la cláusula having.

    Aquí está el código modificado:

    public function getAllowedItems()
    {
        $items = Item::leftJoin('runners_items', 'runners_items.item_id', 'items.id')
                ->leftJoin('subrace_items', 'subrace_items.item_id', 'items.id')
                ->where('subrace_items.sub_race_id', $this->id)
                ->select('items.*', DB::raw('count(items.id)-1 as used_items'))
                ->groupBy('items.id')
                ->havingRaw('used_items < items.limit OR items.limit = 0')
                ->get();
        dd($items);
    }
    

    Esto devolverá elementos donde used_items < límite o el límite es igual a 0. El método havingRaw nos permite especificar condiciones en valores agregados como used_items.

Comments are closed.