Clausola where tra parentesi in Eloquent

Mattepuffo's logo
Clausola where tra parentesi in Eloquent

Clausola where tra parentesi in Eloquent

Diciamo che dal titolo forse non si capisce bene cosa intendo o cosa mi serva.

Soprattutto perchè da quando uso Eloquent è la prima volta che ho questa necessità, quindi non mi ero mai posto il problema.

Quindi partirei direttamente dalla query:

SELECT *
FROM mp_giacenze_attr
	INNER JOIN mp_giacenze ON giac_id = gattr_giac_id
WHERE giac_feed = 'pf'
	AND gattr_chiave = 'gross_weight'
	AND (gattr_valore = '' OR gattr_valore = 0)

Come vedete nella WHERE ci sta una clausola tra parentesi tonde.

Ho scoperto che la funzione where di Eloquent accetta anche una funzione anonima come argomento.

Quindi possiamo fare così:

$query = MpGiacenzaAttr::query()
  ->join('mp_giacenze', 'giac_id', '=', 'gattr_giac_id')
  ->where('giac_feed', $feed)
  ->where('gattr_chiave', $chiave)
  ->where(function ($query) {
    $query->where('gattr_valore', '')
        ->orWhere('gattr_valore', 0);
  })
  ->get();

Enjoy!


Condividi

Commentami!