2016-09-07 99 views
0

我想獲得傳遞到另一個模型查詢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]); 

回答

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); 

轉換集合到一個數組:

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

使用whereIn()

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

但實際上,所有的不似乎有任何意義,因爲$user->companies可能會被讀取y包含要從數據庫中獲取的集合。所以,你也可以這樣寫:

$company = $user->companies; 

但是 - 您使用的是單數命名(公司)的一組公司的事實,讓我覺得,你想實現的東西完全不同。

0

您可以用其中的方法嘗試

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

1

試一下:

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

剛做了一個修補程序測試,結果是一個平面陣列,「發現」將肯定工作!