【问题标题】:whereIn array to string convertion error - LaravelwhereIn 数组到字符串的转换错误 - Laravel
【发布时间】:2014-12-14 00:09:32
【问题描述】:

我想在我的 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) 格式以使用该功能,但我不确定如何。

目前正在以下代码中使用(bedrooms和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.

任何帮助将不胜感激。

【问题讨论】:

  • 如果我下面的解决方案不起作用,请发布您的整个控制器。
  • 我不相信 whereIn 需要 3 个参数。您正在尝试在 whereIn 语句中将 '=' 强制转换为数组,删除它,它应该可以工作,或者至少可以将数组转换为字符串错误。让我知道,我会在下面更新我的答案。
  • 正是以上!谢谢@mschuett!你有一个细节的眼睛。删除第三个参数解决了这个问题并返回了预期的结果。

标签: php arrays json laravel eloquent


【解决方案1】:

没有必要这样做。您是否尝试过没有将它们转换为整数?如果你不能在这篇文章中发布你使用的 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")

除非您确实在数据库中存储未序列化的数组,在这种情况下您还有很多其他问题。

编辑:发布控制器后

我不相信 whereIn 需要 3 个参数。您正在尝试在 whereIn 语句中将 '=' 强制转换为数组,删除它,它应该可以工作,或者至少可以将数组转换为字符串错误。

Link to whereIn Laravel function.

【讨论】:

  • 感谢您的回复。 @mschuett 上方发布的控制器和改进的解释。
【解决方案2】:

首先:我认为 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();

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2022-01-25
    • 2016-09-01
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多