Выбор данных из разных таблиц в laravel

#php #laravel #laravel-5 #eloquent

#php #laravel #laravel-5 #красноречивый

Вопрос:

У меня есть таблица статей, определяемых их ID , name price и category_ID , и таблица категорий, определяемых category_ID и name . Я хочу выбрать в своем контроллере список статей вместе с категорией name .

Как это сделать?

Комментарии:

1. вы используете Eloquent?

2. вы должны определить красноречивые взаимосвязи в своих моделях

Ответ №1:

Мой ответ предполагает, что вы храните модели в папке App Models

В вашей модели Articles определите следующий метод.

 public function category()
{
    return $this->belongsTo('AppModelsCategory');
}
  

Теперь вы можете получить к нему доступ через $myArticle->category->name;

Убедитесь, что в модели категорий определена правильная таблица, основываясь на вашем вопросе, я не могу составить таблицу категорий.

Поместите $table = 'categories'; в категорию model или как там называется таблица.

Комментарии:

1. Обратите внимание, что $myArticle->category() (вызывается как метод) возвращает объект построителя запросов, поэтому вы не можете получить доступ к свойству name. Вместо этого вы должны вызывать отношение как свойство и, чтобы избежать N 1 запросов, стремитесь загрузить отношение перед циклическим выполнением подробных статей.

2. Последнее замечание заключается в том, что вы могли бы обратиться к связанной модели с помощью Category::class . Пока модель категории (файл) находится в том же каталоге, что и модель Post, она будет преобразована в правильный класс, а также для ввода полного доменного имени в виде строки. Кроме того, вы также получите поддержку завершения / рефакторинга IDEs.

Ответ №2:

с помощью raw SQL

 $query = "SELECT articles.* , categories.name AS categoryName FROM articles JOIN categories ON articles.category_ID = categories. category_ID"
$result = DB::select(SQL);
dump($result)
  

или

с помощью Eloquent вы можете добавить в свою модель метод для возврата отношения, давайте назовем его category

 class Article extends Model {
    public function category(){ 
        return $this->hasOne("App/Category" , "category_ID" , "category_ID");
    }
}
  

теперь вы можете сделать это

 $article = Article::find(1);
dump($article->category->name);
  

метод проверки hasOne из документов