whereIn数组到字符串转换错误 - Laravel

时间:2014-10-18 15:34:28

标签: php arrays json laravel eloquent

我想在我的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。

非常感谢任何帮助。

2 个答案:

答案 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语句中的数组删除它,它应该工作或至少得到数组的字符串错误。

Link to whereIn Laravel function.

答案 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();

希望这有帮助。