У меня есть следующий код, который работает, но, похоже, не следует красноречивому способу 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 таблицы; статьи и категории, которые имеют отношения «многие ко многим» друг с другом, сводная таблица, таблица 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 является объектом! Странный.
Спасибо