0

我有以下代码有效,但似乎没有遵循 laravel 雄辩的方式:

Article::left_join('images', 'articles.id', '=', 'images.article_id')
            ->join('article_category', 'articles.id', '=', 'article_category.article_id')
            ->where('article_category.category_id', '=', $category_id)
            ->get();

我有 4 张桌子;彼此具有多对多关系的文章和类别,包含文章 ID 和类别 ID 的数据透视表 article_category 表和与文章具有一对一关系的图像表。

我将模型设置为:

class Category extends Eloquent {
    public static function get_articles($category_id) {
        return static::find($category_id)->has_many_and_belongs_to('Article');
    }

class Article extends Eloquent {
    public function categories() {
        return $this->has_many_and_belongs_to('Category');
    }

    public function image() {
        return $this->has_one('Image');
    }

但是,我似乎无法将所有三个信息放在一起。我可以:

Category::get_articles($current_category)->get();

要获取给定类别中的所有文章,但我似乎无法获取文章的图像,似乎没有什么可以链接到?除非我做错了?有没有我错过的技巧?

我什至尝试了文档中的精简版本:

foreach (Article::with('image')->get() as $article) {
    echo $article->image->foo;
}

但是我收到一个错误:尝试获取非对象的属性,即使 var_dump 显示 $article->image 是一个对象!诡异的。

谢谢

4

1 回答 1

0

如果您尚未为图像表设置模型,请执行此操作。ORM 需要那里的模型,因此它知道“图像”指的是什么。

你可以使用 ::with 方法获取类别信息还是很麻烦?

于 2013-02-06T22:52:37.140 回答