私は単一のモデルを持っており、異なるリレーションを持つ複数のwithCountsにチェーンしようとしています。次に例を示します。
return MyModel::query()
->withCount(array('users'=>function($query){
$query->where('enabled', '=', 1);
}))
->withCount(array('users'=>function($query){
$query->where('phone', '=', "123-4567");
}))
->get();
Laravelは自動的に「USERS_COUNT」と呼ばれる私の結果にsnake_caseフィールド名を返し、基本的にこれは、クエリの有効部分は、携帯電話のセクションで上書きされることを意味ので、これは動作しません。
私はBuilder.phpクラスをちょっと調べて、$ asColumnが返される名前であることに気付きました:https://github.com/laravel/framework/commit/67b821dde62e64f94aa7d99f1806ecf03ea323e5これは、リレーションの$ name + '_count'のちょうどsnake_caseです。
生のクエリを使用せずにカスタム$ asColumnを作成して、両方の結果を得る方法はありますか?私は基本的に私の結果がenabled_users_countとphone_users_count、またはそれに類するものであることを望んでいます。私はまた、2つの異なるクエリを行う必要はありません。
この回答と@Ross Wilsonはどちらも正しいと思いますが、この回答はライブラリに組み込まれているのでもう少しきれいです。私にとって不幸なことに、私はLaravelの古いバージョンを使用しているので、私は彼を使用する必要があります。 – stealthysnacks