Laravel雄辩的关系查询

时间:2016-03-16 06:59:40

标签: php sql laravel laravel-4 laravel-5

我的数据库架构是

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

3 个答案:

答案 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();