php - plantillas - Laravel donde en o donde en
laravel blade variables (5)
Podrías haber buscado solo la función whereIn
en el núcleo para ver eso. Aquí estás. Esto debe responder a todas sus preguntas.
/**
* Add a "where in" clause to the query.
*
* @param string $column
* @param mixed $values
* @param string $boolean
* @param bool $not
* @return /Illuminate/Database/Query/Builder|static
*/
public function whereIn($column, $values, $boolean = ''and'', $not = false)
{
$type = $not ? ''NotIn'' : ''In'';
// If the value of the where in clause is actually a Closure, we will assume that
// the developer is using a full sub-select for this "in" statement, and will
// execute those Closures, then we can re-construct the entire sub-selects.
if ($values instanceof Closure)
{
return $this->whereInSub($column, $values, $boolean, $not);
}
$this->wheres[] = compact(''type'', ''column'', ''values'', ''boolean'');
$this->bindings = array_merge($this->bindings, $values);
return $this;
}
Mira que tiene un tercer parámetro booleano. Buena suerte.
Estoy haciendo una búsqueda de productos por filtros:
Mi código:
->where(function($query) use($filter)
{
if(!empty($filter)){
foreach ($filter as $key => $value) {
$f = explode(",", $value);
$query-> whereIn(''products.value'', $f);
}
}
})
Consulta:
and (products.value in (Bomann, PHILIPS) and products.value in (red,white))
Pero yo necesito:
and (products.value in (Bomann, PHILIPS) OR products.value in (red,white))
¿Hay algo similar en Laravel:
orWhereIn
Por ejemplo, si tiene varias condiciones de WhereIn o de WhereIn y quiere poner corchetes, hágalo así:
$getrecord = DiamondMaster::where(''is_delete'',''0'')->where(''user_id'',Auth::user()->id);
if(!empty($request->stone_id))
{
$postdata = $request->stone_id;
$certi_id =trim($postdata,",");
$getrecord = $getrecord->whereIn(''id'',explode(",", $certi_id))
->orWhereIn(''Certi_NO'',explode(",", $certi_id));
}
$getrecord = $getrecord->get();
Sí, orWhereIn
es un método que puede utilizar.
Estoy bastante seguro de que debería darle el resultado que está buscando, sin embargo, si no lo hace, simplemente podría usar implode
para crear una cadena y luego explotarla (esto es una conjetura en la estructura de su matriz):
$values = implode('','', array_map(function($value)
{
return trim($value, '','');
}, $filters));
$query->whereIn(''products.value'', explode('','' $values));
Tienes una función orWhereIn
en Laravel. Toma los mismos parámetros que la función whereIn
.
No está en la documentación pero puede encontrarla en la API de laravel. http://laravel.com/api/4.1/
Eso debería darte esto:
$query-> orWhereIn(''products.value'', $f);
$query = DB::table(''dms_stakeholder_permissions'');
$query->select(DB::raw(''group_concat(dms_stakeholder_permissions.fid) as fid''),''dms_stakeholder_permissions.rights'');
$query->where(''dms_stakeholder_permissions.stakeholder_id'',''4'');
$query->orWhere(function($subquery) use ($stakeholderId){
$subquery->where(''dms_stakeholder_permissions.stakeholder_id'',$stakeholderId);
$subquery->whereIn(''dms_stakeholder_permissions.rights'',array(''1'',''2'',''3''));
});
$result = $query->get();
return $result;
// SALIDA @input $ stakeholderId = 1
// selecciona group_concat (dms_stakeholder_permissions.fid) como fid, dms_stakeholder_permissionss
. rights
de dms_stakeholder_permissions
donde dms_stakeholder_permissions
. stakeholder_id
= 4 o ( dms_stakeholder_permissions
. stakeholder_id
= 1 y dms_stakeholder_permissions
. rights
en (1, 2, 3))