0

我在 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);

结果还可以。我得到了所有的页面数据和一种语言的翻译,荷兰语(nl)。但是为了从语言数据中获取一个字段,我必须这样做:

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

..我觉得丑陋。我觉得我应该只需要做类似的事情:

$page_data->translations->content;

..但这给了我一个错误(尝试获取非对象的属性)。

我错过了什么还是这就是它的方式?

4

1 回答 1

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有关)

于 2013-06-03T17:45:20.650 回答