正如你可以在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;
但是 - 您使用的是單數命名(公司)的一組公司的事實,讓我覺得,你想實現的東西完全不同。