2013-06-01 166 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種語言荷蘭語(nl)的翻譯。但爲了從語言數據中得到一個字段,我必須這樣做:

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

..我覺得這很醜陋。我覺得我應該只需要做這樣的事情:

$page_data->translations->content; 

..但是這給了我一個錯誤(試圖獲得非對象的屬性)。

我是否錯過了一些東西,或者這只是它的方式?

回答

1

我不認爲有必要在這裏進行急切加載。

這樣做的兩種方式將導致2個查詢:選擇具有給定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

我與你的答案一致。也許這是一個例子,因爲當你製作多種語言的東西時,你不需要所有的語言,只需要用戶語言或當前的語言。也許那麼「與」方法是不適合的(但..)。代碼給了我錯誤,因爲我必須循環關係數據,我想是因爲「has_many」 - 關係。 (我對Laravel相當陌生,所以我可能會對此有點失望。)無論如何,感謝您的幫助! – Meddie

+0

很高興幫助 - 我希望它實際上可以與你的例子一起工作。 – kJamesy