繁体   English   中英

laravel 5.2雄辩地按关系结果计数

[英]laravel 5.2 eloquent order by on relationship result count

我有两个表website_link和website_links_type。 website_link与has_many关系相关的website_links_type。

$this->website_links->where('id',1)->Paginate(10);

和关系

public function broken()
{
    return $this->hasMany('App\Website_links_type')->where('status_code','!=',"200");
}

现在,我想从website_link表中获取结果,但Orderby会根据中断的关系结果计数该结果。

有很多方法可以解决此问题。 在我的回答中,我将使用两个我知道的。

您可以渴望建立关系并使用sortBy()函数。 但是,我认为您不能在此解决方案中使用paginate()功能。

例:

$results = Website_link::with('website_links_type')->get()->sortBy(function ($website_link) {

    return $website_link->website_links_type->count();

});

看到这个答案

您也可以使用原始查询来解决此问题。 使用此解决方案,您仍然可以使用分页功能(我认为)。

例:

$results = Website_link

    ::select([
        '*',
        '(
            SELECT COUNT(*) 
            FROM website_links_type 
            WHERE 
                website_links_type.website_link_id = website_link.id 
            AND 
                status_code <> 200 
        ) as broken_count'
    ])

    ->orderBy('broken_count')

    ->paginate(10);

您可能必须更改列名称以匹配您的数据库。

您不能在模型文件中放置WHERE条件。

您只需在模型文件中指定关系hasMany

并在控制器侧的条件下使用。

请参阅文档。

尝试这个

模型文件:

public function broken()
{
    return $this->hasMany('App\Website_links_type');
}

控制器文件:

$model_name->website_links->where('id',1)
            ->where('status_code','!=',"200")
            ->orderBy('name', 'desc')
            ->Paginate(10);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM