正如你可以在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);
转换集合到一个数组:
$company = Company::find($companies->toArray());
使用whereIn()
:
$company = Company::whereIn('id', $companies)->get();
但实际上,所有的不似乎有任何意义,因为$user->companies
可能会被读取y包含要从数据库中获取的集合。所以,你也可以这样写:
$company = $user->companies;
但是 - 您使用的是单数命名(公司)的一组公司的事实,让我觉得,你想实现的东西完全不同。