我想在我的Eloquent查询中使用WhereIn
函数,它需要一个PHP数组:
$users = DB::table('users')->whereIn('id', array(1, 2, 3))->get();
目前,数据正以这种格式传递到控制器 -
array(4) { [0]=> string(1) "1" [1]=> string(1) "4" [2]=> string(1) "6" }
我希望将上述数据投放到(1,4,6)
格式以使用该功能,但我不确定如何。
目前正在使用以下代码(卧室和property_type以上述格式显示):
$bedrooms = Input::get('bedrooms');
$property_type = Input::get('property_type');
$locations = Location::whereHas('coordinate', function ($q) use ($minlat, $maxlat,
$minlng, $maxlng, $bedrooms, $property_type)
{
$q->whereBetween('lat', array($minlat, $maxlat))
->whereBetween('lng', array($minlng, $maxlng))
->whereIn('bedrooms', '=', $bedrooms)
->whereIn('type', '=', $property_type);
})->lists('id');
这会返回Array to string conversion
错误。
我的Laravel版本是4.2。* - dev。
非常感谢任何帮助。
答案 0 :(得分:2)
没有必要这样做。你是否尝试过它而不将它们强制转换为整数?如果你无法做到这一点发布你正在使用的laravel版本,那么以后碰到这个版本的人不会做不必要的工作。在laravel 4.2。*中,以下代码将返回正确的行。我刚试过这个。
Route::get('/', function(){
$t = DB::table('users')->whereIn('id', array('1','2','3'))->get();
dd($t);
});
这也有效。
Route::get('/', function(){
$t = DB::table('users')->whereIn('id', array(1,2,3))->get();
dd($t);
});
此外,您有这个代码
array(4) { [0]=> string(1) "1" [1]=> string(1) "4" [2]=> string(1) "6" }
这段代码完全一样。一个刚刚使用var_dump显示。
array("1", "4", "6")
除非您在数据库中存储非序列化数组,否则您会遇到大量其他问题。
编辑:控制器发布后
我不相信where3取3个参数。你正试图施展' ='到你的whereIn语句中的数组删除它,它应该工作或至少得到数组的字符串错误。
答案 1 :(得分:1)
首先:我认为Laravel可以处理字符串类型的项目,将其放入sql where子句中,其中列是整数。
第二:如果它不起作用,你总是可以使用array_map
方法将这些字符串“强制转换”为整数。
更多信息: http://php.net/manual/en/function.array-map.php
在你的例子中:
$ids = array('1', '4', '6');
$ids = array_map(function ($value) {
return (int) $value;
}, $ids);
$users = DB::table('users')->whereIn('id', $ids)->get();
希望这有帮助。