Eloquent Return Non Associative Array?

时间:2016-09-07 16:23:52

标签: laravel laravel-5 eloquent

我正在尝试获取要传递到另一个模型查询的ID数组列表。

$companies = $user->companies->pluck('id');

但它不断返回一个关联数组:

[ 0 => 2, 1 => 9]

所以当我将它传递给我的公司模型上的find方法时,就像这样

$company = Company::find($companies);

我收到以下错误:

Trying to get property of non-object

我需要能够将非关联数组传递给调用,如:

Company::find([2,9]);

3 个答案:

答案 0 :(得分:1)

试试:

$companies = $user->companies->pluck('id')->toArray();

刚刚在修补程序中进行了测试,结果是一个平面阵列,“查找”肯定会起作用!

答案 1 :(得分:1)

正如您在Laravels源代码中看到的那样

src/Illuminate/Database/Eloquent/Builder.php

public function find($id, $columns = ['*'])
{
    if (is_array($id)) {
        return $this->findMany($id, $columns);
    }
    $this->query->where($this->model->getQualifiedKeyName(), '=', $id);
    return $this->first($columns);
}
如果第一个参数是数组,

find()将在内部调用findMany()。但$user->companies->pluck('id')会返回CollectionBuilder会生成错误的查询。所以你的选择是:

使用findMany()

$company = Company::findMany($companies);

将Collection转换为数组:

$company = Company::find($companies->toArray());

使用whereIn()

$company = Company::whereIn('id', $companies)->get();

但实际上所有似乎都没有任何意义,因为$user->companies可能已经包含了你想从DB中获取的集合。所以你也可以写:

$company = $user->companies;

然而 - 你正在为一组公司使用单一命名(公司)这一事实让我觉得你正在努力实现完全不同的东西。

答案 2 :(得分:0)

您可以尝试使用whereIn方法

Company::whereIn('id', $companies)->get();