2013-07-12 3 views
1

Laravel의 ORM에 지루한 문제가 있습니다.Laravel : belongsTo() 관계 일대일 관계가 아닌 일대 다 관계를 가정합니다.

class Pages extends Eloquent { 

    protected $guarded = array('id','config_id'); 

    public function template() 
    { 
     return $this->belongsTo('Templates', 'templates_id'); 
    } 

    public function updateUser() 
    { 
     return $this->belongsTo('Users', 'updated_by'); 
    } 

이 지금은 같은 간단한 방법으로 템플릿 관련 항목에 액세스 할 수 있습니다 :

이 같은 여러 관계를 가진 모델이

$this->template->name; 

을 그리고 그것은 밖으로 작동 왜냐하면 Laravel의 ORM은 일대일 관계라고 가정하고 내부적으로 first() 메서드를 호출하기 때문입니다.

그러나 updateUser를 사용하여 동일한 작업을 시도해도 실패합니다. 즉, 비 객체에 이름을 호출 할 수 없다는 오류가 반환됩니다.

그러나 나는 시도 할 경우이 :

$this->updateUser()->first()->name; 

작동하지만, 나에게 느낌이 좋지 않습니다.

내 질문은 Laravel의 ORM이 belongsTo()로 정의 된 관계가 일대일 또는 일 대 다인지 결정하는 방법입니다. 필요한 행동을 강요 할 수있는 방법이 있습니까?

감사합니다.

+0

당신이'hasOne의()를 사용하는'다른 관계를 설정하는 방법? [documentation] (http://four.laravel.com/docs/eloquent#one-to-one)을 읽으셨습니까? – naththedeveloper

+0

예, 문서를 읽었습니다. 단일 사용자가 많은 페이지의 업데이터 일 수 있기 때문에 hasOne()을 사용하지 않았습니다. 이는 사용자 관점에서 일대 다 관계가 있지만 페이지의 일대일 관계입니다. – Ingro

답변

3

관계를 정의해야합니다. 관점에서 '다른'관계를 정의 할 수 있습니다.

->belongsTo() 함수는 역함수입니다.하지만 사용자 테이블에는 아무 것도 정의하지 않으므로 반대의 경우 일대 다라고 가정합니다.

그냥 사용자 클래스에이를 추가

class Users extends Eloquent { 

    public function pages() 
    { 
     return $this->hasMany('Pages'); 
    } 
} 
+0

글쎄, 내가 조각을 놓치고있는 것 같다, 해명 해줘서 고마워! – Ingro

+0

죄송합니다. 답변을 얻지 못했습니다 ... 항상 작동하려면 관계의 반대를 정의해야합니다. 다른 모델의 관계를 모델링하고 싶지 않으면 어떻게합니까? –

관련 문제