0

MySQL のクエリがありますが、雄弁なモデル laravel 8 に変換する必要があります。クエリは以下のとおりです。

$query = "SELECT  group_id FROM `chat_histories` join chat_group on chat_group.id = chat_histories.group_id where chat_group.is_group = 1 and chat_histories.created_at BETWEEN '$startDate' and '$endDate' and chat_histories.deleted_at is null group by group_id";
$query = "select count(group_id) as total_chat_thread from ($query) total_chat";
DB::select($query);

これまで私はこれを行ってきましたが、

ChatHistory::leftJoin('chat_group', 'chat_group.id', '=', 'chat_histories.group_id')
        ->selectRaw('count(*) as totals')
        ->where('chat_group.is_group', 1)
        ->whereBetween('chat_histories.created_at', [$startDate, $endDate])
        ->groupBy('chat_histories.group_id')
        ->count('totals');

しかし、これはリストを返しますが、リストの数が必要です。つまり、22 行が表示されていることを意味します。その 22 行が返される必要があります。

My Model ChatHistory と ChatGroup の関係

 public function chatGroup() {
    return $this->belongsTo(ChatGroup::class, 'group_id', 'id');
}

My Model ChatGroup と ChatHistory の関係

public function chatHistory() {
    return $this->hasMany(ChatHistory::class,'group_id','id');
}

それを雄弁なモデルクエリに変換するのを手伝ってください よろしくお願いします。

4

2 に答える 2

2

historyリレーションhasManyを持つモデル Group がある場合。このようにする必要があります。

$groupCount = ChatGroup::whereHas('chatHistory', function ($historyQB) use($startDate,$endDate)  {
    $historyQB->whereBetween('created_at', [$startDate, $endDate])
        ->whereNull('deleted_at');
})->count();

whereNullモデル ChatHistory で softDelete が有効になっている場合、 は必要ありません。

于 2021-05-05T14:40:12.153 に答える