如何在Laravel中进行复杂的查询SQL?

How to do complicated query SQL in Laravel?

我使用三个实体:user, categories, user_categories, articles, articeles_category

每个用户都可以订阅某些类别,因此 table user_categories 将是:

user_category
    id user_id category_id
    1  1       1

articles_category
    id article_id  category_id
    1  1           1


articles
    id name
    1  Bla

所以,我需要 select 所有 articles 其中 articeles_category 对应于用户在 table user_categories.[=25 中订阅的类别=]

我试过这个:

Articles::with("categories")->with("publisher.categories")->where("user_id", 1);

public function categories()
    {
        return $this->hasMany("App\ArticlesCategory", "article_id", "id");
    }

public function publisher()
    {
        return $this->hasOne("App\User", "id", "user_id");
    }

我有一些想法。

首先加入tables:

user_categoriesarticeles_category 按条件:

user_categories.category_id = articeles_category.id AND user_categories.user_id = 4

第二个是:

Select 篇来自 Articles 的文章与之前的查询相结合。

Third is

通过 user_id

成为全球 where

如果您的模型从用户链接到类别再到文章,您可以:

$categories = $user->categories()->with('articles')->get();

然后将它们归为同一集合(如果需要):

$articles = $categories->map(function($category){
    return $category->articles;
});

或者,如果您没有用户实例:

$user = User::find($user_id)->with('categories.articles').->get();

查看预先加载:https://laravel.com/docs/5.4/eloquent-relationships#eager-loading