2015-10-03 6 views
2

У меня есть четыре таблицыLaravel Eloquent извлечения данных из нескольких таблиц

**Articles table** 

id 
title 
body 
owner_id 
category_id 

**Favorite articles table** 

    id 
    user_id 
    article_id 

**User table** 

id 
user_name 
user_type 

**Category table** 

id 
category_name 

Как получить список любимых статей (article_name, owner_name, category_name), которые касаются текущего вошедшего пользователя из БД с помощью Laravel красноречивый?

Можно ли это сделать в одной строке запроса? например .:

$articles_data=Auth::user()->favorite_articles->article... 

EDIT На данный момент я должен использовать заявление ниже:

$articles_data = FavoriteArticle::where('user_id', Auth::id())->join('articles', 'articles.id', '=', 'favorite_articles.article.id') 
          ->join('users', 'users.id', '=', 'favorite_articles.user_id') 
          ->join('categories', 'categories.id', '=', 'articles.id') 
          ->get() 

который выглядит немного сложнее и не использует красноречивые отношения.

+2

Вы можете просто настроить [многие-ко-многим] (http://laravel.com/docs/5.1/eloquent-relationships#many-to-many) между ' Модель пользователя и модель «Статья». – Bogdan

+0

Да, я могу, но как получить данные из других таблиц (значение category_name) – user947668

+0

@ user947668 Я обновил свой ответ, надеюсь, что это поможет. cheers – AndreL

ответ

3

Completing @zippo_ ответ, в Controller вы должны ссылаться на какие таблицы вы хотите, например,

User.php

use Article; 

public function article() 
{ 
    return $this->hasOne('App\Article'); 
} 

и в, например, UserController.php

$user = User::with('article')->get(); 

EDIT:

если вы хотите связать пользователя с Article.Category, после того, как создать связь с пользователем и статьей

article.php

use Category; 

public function category() 
{ 
    return $this->hasOne('App\Category'); 
} 

eg UserController.php

$user_articles_categories = User::with('article.category')->get(); 
1

Вы можете воспользоваться активной загрузкой laravel, которую также называют дружескими отношениями.

Зловонные отношения определяются как функции на ваших классах модели Eloquent.

Например. В статье Модель

public function article() 
{ 
    return $this->hasOne('App\Model\Category'); 
} 

Таким образом, вам необходимо определить все отношения в соответствующих классах модели.

для получения дополнительной информации: http://laravel.com/docs/5.1/eloquent-relationships

Смежные вопросы