我在laravel中急切加载时遇到了麻烦
我有这些模特:
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;
..但是这给了我一个错误(试图获取非对象的属性)。
我错过了什么,或者这就是它的方式?
答案 0 :(得分: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有关)