拉拉维尔雄辩的关系查询


Laravel eloquent Relationship Query

我的数据库模式是

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