首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel高级查询

问Laravel高级查询
EN

Stack Overflow用户
提问于 2021-01-12 22:18:34
回答 2查看 35关注 0票数 0

联营公司有很多affiliatesHistory,affiliatesHistory属于联属公司,如何进行以下查询?

以附属公司为例,其中有affiliatesHistory,如果affiliatesHistory记录计数等于1,则不要采用状态为已卸载的affiliatesHistory。

代码语言:javascript
复制
$affiliates = $user->affiliates()
        ->whereDoesntHave('affiliatesHistory', function ($q) {
        $q->where('affiliates_histories.status', 'Installed earlier')
 ->orWhere('affiliates_histories.status', 'Uninstalled / Installed earlier');

下面的查询可以用,但我不需要接受那些affiliatesHistory计数等于1且状态为已卸载的分支机构。

任何帮助都将受到欢迎。

EN

回答 2

Stack Overflow用户

发布于 2021-01-13 00:12:34

所以,据我所知,你想要得到的附属公司的affiliatesHistory状态是安装较早。如果是这样的话,试试这个:

代码语言:javascript
复制
$user_affiliates =  $user->affiliates(); 
$affiliates = $user_affiliates->whereHas('affiliatesHistory', function($q){
   $q->where('status', 'Installed earlier');
})->get();

dd($affiliates);
票数 0
EN

Stack Overflow用户

发布于 2021-01-13 02:50:52

对于您的情况,如果有多个affiliatesHistory项,则返回else如果只有一个affiliatesHistory,则它不应该包含未安装状态,我猜您可以使用条件计数来获得所需的结果,如下所示

代码语言:javascript
复制
$affiliates = Affiliate::withCount([
    'affiliatesHistory',
    'affiliatesHistory as affiliatesHistoryUninstalled_count' => function ($query) {
        $query->where('status', 'Uninstalled');
    }
    ])->where('user_id', $user->id)
      ->havingRaw('affiliatesHistory_count > 1 OR (affiliatesHistory_count = 1 AND affiliatesHistoryUninstalled_count = 0)')
      ->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65685736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档