我正在尝试获取要传递到另一个模型查询的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]);
答案 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')
会返回Collection
,Builder
会生成错误的查询。所以你的选择是:
使用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();