我的数据库架构是
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 eloquent。
结果应该与给定的数据相似
id status user_id url external_links internal_links
1 1 1 something 3 1
答案 0 :(得分: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();
答案 1 :(得分:0)
如果您已经使用fk进行了正确的迁移,并且以下代码的模型应该正常运行:
$links = Link::where('status','=','1')->where('user_id','=','1')
->whereHas('links_type',function ($query) {
$query->whereNotIn('external_count', [0,1]);
})->get();
可能应该为(' links_type')添加eager_loading(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();
答案 2 :(得分:0)
也许这可行。
在您必须为链接创建 hasMany 关系并命名为类型
之前$links = Link::where('status', 1)
->wherer('user_id', 1)
->whereHas('type', function($query) {
$query->where(
$query->where('links_type', 'external')->count(), '>', 2
);
})
->get();