2014-12-22 48 views
4

我創建了3個表格:用戶,角色和角色用戶。查找和得到的差異

用戶模型:

public function roles() 
{ 
    return $this->belongsToMany('Role'); 
} 

這是確定的,我可以得到的關係

$roles = User::find(1)->roles; 

但是,當我改變

$roles = User::where('name', 'Test')->get()->roles; 

Undefined property: Illuminate\Database\Eloquent\Collection::$roles

所以這是小號青梅錯誤或'找到','哪裏'有區別? 如果我想用於獲取關係,我該怎麼辦?

回答

11

get()

get()簡單地執行什麼(選擇)查詢你已經建成了。它會在任何情況下返回一個集合Illuminate\Database\Eloquent\Collection)。這是你的錯誤信息的原因。你想要一個模型的$roles,但你試圖從一個集合中獲取它,這顯然是不可能的。

find()

find()用於通過它的/它們主鍵(一個或多個)抓取一個或多個模型。如果找不到記錄,返回值將是單個模型,集合或null

用途

$user = User::find(1); // returns model or null 
$users = User::find(array(1, 2, 3)); // returns collection 

等效採用first()

first()返回的第一條記錄,所以你得到一個單一的模式,即使結果可能會包含多個記錄

$user = User::where('id', 1)->first(); 

返回相同as

$user = User::find(1); 

意爲你的情況要使用first()代替get()

$roles = User::where('name', 'Test')->first()->roles; 
0

get返回一個集合,find返回單個模型。所以顯然你不能在用戶集合上調用->name

User::find(1); // single User model 
User::find([1,2,3]); // collection of User models 
User::get(); // collection of User models 

還有其他方法返回的查詢結果,如:

User::first(); // single User model 
User::pluck('name'); // single value of name field of the first row 

等.. read the docs