2013-06-01 4 views
0
내가

laravelLaravel 열망 로딩 결과

에 열망 로딩에 문제가있어

내가 가진이 모델 :

class Page extends Eloquent { 

    public function translations() { 
     return $this->has_many('Pagestl', 'page_id'); 
    } 
} 

class Pagestl extends Eloquent { 

    public static $table = 'pages_tl'; 

    public function page() { 
     return $this->belongs_to('Page', 'id'); 
    } 
} 

나는 그것의 번역 데이터를 특정 페이지를 원하는 특정 언어의 나는이 같은 데이터를 검색 :

$page_data = Page::with(array('translations' => function($query) { 
    $query->where('lang_id', '=', 'nl')->first(); 
}))->find($id); 

드 결과 확인 틱입니다. 나는 모든 페이지 데이터와 1 개의 언어 dutch (nl)의 번역본을 얻습니다. 그러나 언어 데이터에서 필드를 얻기 위하여 나는 여기에 있습니다 : 내가 못생긴 찾을 요식

$page_data->translations[0]->attributes['content_or_whatever']; 

합니다. (비 개체의 속성을 얻으려고 노력)이 나에게 오류를 제공합니다 ..하지만

$page_data->translations->content; 

: 나는 내가 단지 같은 뭔가를해야한다고 생각한다.

나는 뭔가를 놓치고 있는가, 아니면 그냥 그런가?

답변

1

여기서 eager-loading을 할 필요가 없습니다.

두 가지 방법으로 두 개의 쿼리가 생성됩니다. 주어진 ID로 페이지를 선택한 다음 첫 번째 번역을 찾습니다.

그래서, 내가 할 것 :

$page = Page::find($id); 

다음

$page_data = Pagestl::where_page_id_and_lang_id($page->id, 'nl')->first(); 

을 그런 내용 필드 pages_tl 테이블에 존재 가정, 우리는 수행하여 그것을 얻을 수 있습니다 :

echo $page_data->content; 

마지막으로 코드는 괜찮아 보입니다. 관계를 정의 할 때 Laravel이 기대하는 것과 다른 경우가 아니면 두 번째 매개 변수를 가질 필요가 없습니다.

나는 문제가 코드와 함께 어디 있는지 찾아 드리겠습니다

(나는 주어진 정보로부터 알아낼 수 - strings.php 함께 할 수있는 뭔가가 될 수있다) 나는 당신의 대답에 동의

+0

합니다. 다국어 지원을 할 때 모든 언어, 사용자 언어 또는 현재 언어 또는 기타 언어가 필요하지 않을 수 있으므로 예일 수 있습니다. 그리고 아마도 "with"방법은 적합하지 않습니다 (아직 ..). 이 코드는 관계 데이터를 반복해야하기 때문에 오류가 발생합니다. 왜냐하면 "has_many"- 관련성 때문에 생각합니다. (저는 Laravel을 처음 접해 보았습니다. 그래서 이것에 관해서 조금 비껴 들었습니다.) 어쨌든, 도와 줘서 고마워! – Meddie

+0

도와 줘서 기쁩니다 - 실제로 귀하의 예를 사용하기를 바랍니다. – kJamesy