tablas multitabla hacer consultas consultar consulta como anidadas php laravel eloquent laravel-query-builder

php - multitabla - laravel eloquent limit



Laravel 4 Eloquent Query usando WHERE with OR AND OR? (10)

¿Cómo digo WHERE (a = 1 OR b =1 ) AND (c = 1 OR d = 1)

Para consultas más complicadas, ¿se supone que debo usar SQL en bruto?


En caso de que esté aplicando las condiciones OR, no necesita la segunda $ consulta-> dónde de las otras publicaciones (en realidad no creo que necesite en general, solo puede usar o En qué lugar del anidado, si es más fácil)

$attributes = [''first''=>''a'',''second''=>''b'']; $query->where(function ($query) use ($attributes) { foreach ($attributes as $key=>value) { //you can use orWhere the first time, dosn''t need to be ->where $query->orWhere($key,$value); } });


Hacer uso de la agrupación de parámetros ( Laravel 4.2 ). Para tu ejemplo, sería algo como esto:

Model::where(function ($query) { $query->where(''a'', ''='', 1) ->orWhere(''b'', ''='', 1); })->where(function ($query) { $query->where(''c'', ''='', 1) ->orWhere(''d'', ''='', 1); });


Otra forma sin usar Modal

Base de datos: stocks Columnas: ID, nombre, nombre de compañía, nombre de intercambio, estado

$name =''aa'' $stocks = DB::table(''stocks'') ->select(''name'', ''company_name'', ''exchange_name'') ->where(function($query) use ($name) { $query->where(''name'', ''like'', ''%'' . $name . ''%'') ->orWhere(''company_name'', ''like'', ''%'' . $name . ''%''); }) ->Where(''status'', ''='', 1) ->limit(20) ->get();


Si desea utilizar parámetros para a, b, c, d en Laravel 4

Model::where(function ($query) use ($a,$b) { $query->where(''a'', ''='', $a) ->orWhere(''b'', ''='', $b); }) ->where(function ($query) use ($c,$d) { $query->where(''c'', ''='', $c) ->orWhere(''d'', ''='', $d); });


Si quieres usar paréntesis en laravel 4 y no olvides regresar
En Laravel 4 (al menos) necesitas usar $ a, $ b entre paréntesis como en el ejemplo

$a = 1; $b = 1; $c = 1; $d = 1; Model::where(function ($query) use ($a, $b) { return $query->where(''a'', ''='', $a) ->orWhere(''b'', ''='', $b); })->where(function ($query) use ($c, $d) { return $query->where(''c'', ''='', $c) ->orWhere(''d'', ''='', $d); });

Este es mi resultado:


También puede consultar la primera o la condición y luego puede aplicar otra o la condición

$model = Model::where(''a'',1)->orWhere(''b'',1);

Ahora aplique otra condición en esa variable $model

$model1 = $model->where(''c'',1)->orWhere(''d'',1)->get();


También puede usar los ámbitos de consulta para hacer las cosas un poco más ordenadas, por lo que puede hacer algo como:

Invoice::where(''account'', 27)->notPaidAt($date)->get();

Entonces en tu modelo

public function scopeNotPaidAt($query, $asAt) { $query = $query->where(function ($query) use ($asAt) { $query->where(''paid'', ''='', ''0000-00-00'')->orWhere(''paid'', ''>='', $asAt); }); return $query; }


$ a, $ b, $ c, $ d pueden ser valores dinámicos según la consulta

->where(function($query) use ($a, $b) { $query->where(''a'', $a) ->orWhere(''b'',$b); }) ->where(function($query) use ($c, $d) { $query->where(''c'', $c) ->orWhere(''d'',$d); })


Simplemente use en Laravel Eloquent:

$a=''foo'', $b=''bar'', $c=''john'', $d=''doe''; Coder::where(function ($query) use ($a, $b) { $query->where(''a'', ''='', $a) ->orWhere(''b'', ''='', $b); })->where(function ($query) use ($c, $d) { $query->where(''c'', ''='', $c) ->orWhere(''d'', ''='', $d); })->get();

Producirá una consulta como:

SELECT * FROM <table> WHERE (a=''foo'' or b=''bar'') AND (c=''john'' or d=''doe'');


YourModel::where(function ($query) use($a,$b) { $query->where(''a'',''='',$a) ->orWhere(''b'',''='', $b); })->where(function ($query) use ($c,$d) { $query->where(''c'',''='',$c) ->orWhere(''d'',''='',$d); });