2014-12-22 1 views
4

나는 사용자, 역할 및 role_user 3 테이블을 만들었습니다.발견과 차이가 Eloquent

사용자 모델 : 난 그래서 즉

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

$roles = User::where('name', 'Test')->get()->roles; 
을 변경하는 경우

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

이 괜찮습니다, 내가 관계

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

을 얻을 수 있지만, 에스 오메가 잘못되었거나 '찾기', '어디서'가 다른가요? 가져 오기 관계를 어디에 사용해야하는지 어떻게 할 수 있습니까?

답변

11

get()

get() 것은 단순히 (선택) 어떤 쿼리를 실행 .. 또한 쿼리 결과, 예를 들면 : 등등

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

및 반환 다른 방법이 있습니다 당신이지었습니다. 그것은 컬렉션 (Illuminate\Database\Eloquent\Collection) 어떤 경우에도 반환합니다. 이것이 오류 메시지의 원인입니다. 한 모델의 $roles을 원하지만 컬렉션에서 가져 오려고하는 경우는 분명합니다.

find()

find()

는 그/자신의 기본 키 (들)에 의해 하나 개 또는 여러 모델을 가져 오는 데 사용됩니다. 레코드가 없으면 반환 값은 단일 모델이거나 컬렉션이거나 null입니다.

는 하나의 모델을 얻을 수 있도록 결과가 여러 레코드

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

반환 같은를 포함 할 수있다하더라도,

first()가 첫 번째 레코드를 반환 first()

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

등가 사용 예 :

$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 

read the docs