如何在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_categories
和 articeles_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
我使用三个实体: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_categories
和 articeles_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