Laravel高级查询



关联方有很多affiliatesHistory,affiliates History属于关联方,如何进行以下查询?

以具有affiliatesHistory的附属公司为例,如果affiliates History记录计数等于1,则不采用状态为"已卸载"的affiliationsHistory。

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

以下查询有效,但我不需要接受那些附属机构,其中affiliatesHistory计数等于1,并且状态为卸载。

任何帮助都会得到通知。

因此,据我所知,您希望获得affiliatesHistory状态为Installed early的附属公司。如果是这种情况,那么试试这个:

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

对于您的情况,如果有多个affiliatesHistory项目,则返回其他项目。如果只有一个affiliatesHistory,则不应包含卸载状态,我想您可以使用条件计数作为获得所需结果

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

最新更新