【问题标题】:Laravel advanced queryLaravel 高级查询
【发布时间】:2021-01-12 14:18:33
【问题描述】:

affiliate 有很多affiliateHistory,affiliateHistory 属于affiliate,如何进行如下查询?

取affiliates,其中有affiliatesHistory,如果affiliateHistory记录数为1,则不取affiliateHistory,状态为uninstalled。

$affiliates = $user->affiliates()
        ->whereDoesntHave('affiliatesHistory', function ($q) {
        $q->where('affiliates_histories.status', 'Installed earlier')
 ->orWhere('affiliates_histories.status', 'Uninstalled / Installed earlier');

以下查询有效,但我不需要使用那些affiliatesHistory 计数等于 1 且状态为卸载的关联公司。

如有任何帮助,将不胜感激。

【问题讨论】:

  • 如果您想按照这种方式进行操作,您是否尝试使用原始查询离开加入,我可以写一个答案

标签: php laravel laravel-5 eloquent


【解决方案1】:

因此,据我了解,您希望获得较早安装了会员历史状态的会员。如果是这种情况,那么试试这个:

$user_affiliates =  $user->affiliates(); 
$affiliates = $user_affiliates->whereHas('affiliatesHistory', function($q){
   $q->where('status', 'Installed earlier');
})->get();

dd($affiliates);

【讨论】:

    【解决方案2】:

    对于您的情况,如果有多个 affiliatesHistory 项目,则返回 else 如果只有一个 affiliatesHistory 那么它不应该包含 Uninstalled 状态,我想您可以使用条件计数来获得所需的结果

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

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 2021-08-16
      • 2018-10-21
      • 2015-06-09
      • 2016-12-13
      • 1970-01-01
      • 2020-01-11
      • 2015-01-14
      • 2018-08-01
      相关资源
      最近更新 更多