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);
});
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);
});