我的数据库模式是
links:
id status user_id url
1 1 1 something
2 1 1 something
3 1 1 something
links_type:
id link_id links_type
1 1 external
2 1 external
3 1 internal
4 1 external
5 2 internal
6 2 external
7 2 internal
8 2 external
我想获取状态为 1 且user_id为 1 的所有链接的数据并计算外部和内部链接以及哪个外部计数为>2。
通过使用Laravel 5.2雄辩。
根据给出的数据,结果应该是这样的
id status user_id url external_links internal_links
1 1 1 something 3 1
只需在模型中定义此关系Link
public function link_type()
{
return $this->hasMany('App'linkType');
}
并使用此查询
Link::where('status','=','1')->where('user_id','=','1')->has('link_type','>', '2')->with('link_type')->get();
如果您已经使用 fk 和模型进行了正确的迁移,则以下代码应该可以正常工作:
$links = Link::where('status','=','1')->where('user_id','=','1')
->whereHas('links_type',function ($query) {
$query->whereNotIn('external_count', [0,1]);
})->get();
可能应该为eager_loading添加 with('links_type')(N+1 问题):
$links = Link::with('links_type')->where('status','=','1')->where('user_id','=','1')
->whereHas('links_type',function ($query) {
$query->whereNotIn('external_count', [0,1]);
})->get();
也许这可以工作。
在必须为链接创建具有多个关系之前,并将名称命名为类型
$links = Link::where('status', 1)
->wherer('user_id', 1)
->whereHas('type', function($query) {
$query->where(
$query->where('links_type', 'external')->count(), '>', 2
);
})
->get();