我有两个表website_link和website_links_type。 website_link与具有hasmany关系的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会导致关系结果破坏。
答案 0 :(得分:1)
有很多方法可以解决这个问题。在我的回答中,我将使用两个我知道的。
您可以加载您的关系并使用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);
您可能需要更改列名以匹配您的数据库。
答案 1 :(得分:0)
您不能将WHERE条件放在模型文件中。
您只需在模型文件中提供 hasMany 的关系。
并使用控制器端的条件。
参考this文件。
试试这个
模型文件:
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);