【问题标题】:Eloquent ORM laravel 5 Get Array of ids雄辩的ORM laravel 5获取ID数组
【发布时间】:2016-03-22 08:41:10
【问题描述】:

我使用的是 Eloquent ORM laravel 5.1,我想返回一个大于 0 的 id 数组,我的模型叫做test

我试过了:

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();

它返回:

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )

但我希望结果是这样的简单数组:

Array ( 1,2 )

【问题讨论】:

    标签: php laravel laravel-5 eloquent model


    【解决方案1】:

    了解 list() 方法

    $test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()
    

    【讨论】:

    • 当我在刀片文件中使用 in_array_command 时显示此错误。 >in_array() 期望参数 2 是数组,给定对象
    • 哦,我明白了,你需要调用 toArray(),lists() 返回集合
    【解决方案2】:

    你可以使用 lists()

    test::where('id' ,'>' ,0)->lists('id')->toArray();
    

    注意:最好以Studly Case 格式定义模型,例如Test


    您也可以使用 get()

    test::where('id' ,'>' ,0)->get('id');
    

    更新: (对于 >= 5.2 的版本)

    lists() 方法在新版本>= 5.2弃用,现在您可以使用pluck() 方法:

    test::where('id' ,'>' ,0)->pluck('id')->toArray();
    

    注意: 如果您需要 string,例如在 blade 中,您可以使用没有 toArray() 部分的函数,例如:

    test::where('id' ,'>' ,0)->pluck('id');
    

    【讨论】:

    • 与 pluck('id') 数组为 array('0'=>12, '1'=>14) 等,当在 WhereIn('id', $array) 中使用时,它不是按 id 选择,而是按数组键选择,所以按 0,1...
    • toArray() 应该返回一个类似[12,14]的数组
    • 哦,是的,你是对的,我是通过 Debugbar ant print_r 调试的,它们都显示了带有键的数组值,但是没有键。谢谢!
    • 我们为一个项目停留在 4.2,所以我很感激保留 ->lists('id') 参考。虽然直接生成了一个数组,但不需要 ->toArray 它。
    【解决方案3】:

    正确答案是lists方法,很简单:

    $test=test::select('id')->where('id' ,'>' ,0)->lists('id');
    

    问候!

    【讨论】:

    • 如何通过多对多关系获取数组中相关id的列表??
    • 也许你可以使用DB类,例如:DB::table('name_of_table')->where('condition')->lists('id');
    【解决方案4】:

    来自Collection,另一种方法是:

    $collection->pluck('id')->toArray()
    

    这将返回一个索引数组,例如,laravel 在whereIn() 查询中完全可以使用。

    【讨论】:

    • 也用于下拉列表。
    • 要从模型\YourModel::all(['id']) ... ->pluck... 中提取集合(仅指定 ID 列,您不会将所有数据加载到模型)
    【解决方案5】:

    您可以使用all() 方法代替toArray() 方法(查看更多:laravel documentation):

    test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array
    

    如果需要string,可以不带toArray()附件使用:

    test::where('id' ,'>' ,0)->pluck('id'); //returns string
    

    【讨论】:

      【解决方案6】:

      如果您使用的是DB,请提供额外信息:

      DB::table('test')->where('id', '>', 0)->pluck('id')->toArray();
      

      如果使用 Eloquent 模型:

      test::where('id', '>', 0)->lists('id')->toArray();
      

      【讨论】:

        【解决方案7】:

        虽然你已经标记了答案,但这是一个更简单的方法

        App\User::pluck('id')->toArray()
        

        【讨论】:

          【解决方案8】:

          从集合中获取具有模型 ID 的数组的简单方法

          $test = test::select('id')->where('id' ,'>' ,0)->get('id')->modelKeys();
          

          自 Laravel 5.5 起可用: https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Collection.html#method_modelKeys

          【讨论】:

          • 关于 Laravel 8:... ->get()->modelKeys()
          • ->get('id')->modelKeys(); - 不用了,够了->->get()->model Keys();
          猜你喜欢
          • 2016-08-27
          • 1970-01-01
          • 2014-06-22
          • 1970-01-01
          • 2018-08-06
          • 1970-01-01
          • 1970-01-01
          • 2015-05-22
          • 1970-01-01
          相关资源
          最近更新 更多