Apa kondisi jumlah hubungan di WhereHas Laravel

Saya mengalami kesulitan memahami kondisi jumlah hubungan di WhereHas. Halaman dokumen tidak membahasnya tetapi halaman API membahasnya. Kutipan dari API.

Builder|Builder WhereHas(string $relation, Penutupan $callback, string $operator = '>=', int $count = 1)

Tambahkan kondisi jumlah hubungan ke kueri dengan klausa Where.

Contoh

Model Resource memiliki hubungan Banyak ke Banyak dengan ResourceCategory

public function categories()
{
    return $this->belongsToMany('ResourceCategory', 'resource_category_mapping');
}

Kondisi hubungan di Has

Kondisi hubungan di Telah berfungsi seperti yang diharapkan.

Resource::has('categories', '>', 1)->get()
//this return all resources which have more than one catgories

Kondisi hubungan di WhereHas

Kondisi hubungan di WhereHas tidak berjalan sesuai harapan. Saya yakin saya telah salah memahaminya.

Resource::whereHas('categories', function ( $query){
            $query->whereIn('resource_category_id', [1, 2, 4]);
        }, '>', 1)->get()

Kode di atas harus mengembalikan sumber daya yang kategorinya termasuk dalam salah satu [1, 2, 4] dan sumber daya tersebut memiliki lebih dari satu kategori. Tapi ternyata tidak.

Pertanyaan

Mohon jelaskan kondisi hubungan di WhereHas, mungkin memberikan contoh akan sangat membantu.


person hhsadiq    schedule 25.07.2015    source sumber


Jawaban (1)


Biasanya, whereHas() memeriksa apakah model Anda memiliki setidaknya satu model terkait. Anda dapat menyetel $count ke nilai yang lebih tinggi untuk meningkatkan jumlah menjadi Ndan hanya mengambil model yang memiliki setidaknya N model terkait.

Dalam kasus Anda, menelepon

Resource::has('categories', '>', 2)->get();

hanya akan mengembalikan Sumber Daya yang memiliki setidaknya 2 kategori terkait.

person jedrzej.kurylo    schedule 25.07.2015
comment
dapatkah Anda memverifikasi penjelasan saya tentang Kode WhereHas saya 'Kode di atas harus mengembalikan sumber daya yang kategorinya termasuk dalam salah satu dari [1, 2, 4] dan sumber daya memiliki lebih dari satu kategori'. Apakah itu benar...? - person hhsadiq; 25.07.2015
comment
Bekerja untuk saya. Silakan tempel kueri yang Anda dapatkan - ganti get() dengan toSql() - dan tempel di sini. - person jedrzej.kurylo; 25.07.2015
comment
pilih * dari resource di mana resource.deleted_at adalah null dan first_name = ? dan (pilih hitungan(*) dari resource_category gabung dalam resource_category_mapping pada resource_category.id = resource_category_mapping.resource_category_id dimana resource_category_mapping.resource_id = resource.id dan resource_category_id di (?, ?, ?, ?)) = 3 - person hhsadiq; 25.07.2015
comment
Dari mana asal =3 itu? apakah kamu menambahkan ini? Kuerinya terlihat oke selain ini. - person jedrzej.kurylo; 25.07.2015
comment
maaf saya hanya mengutak-atik kode. Anda dapat menggantinya dengan ›1 - person hhsadiq; 25.07.2015
comment
Seperti yang saya katakan, kuerinya terlihat oke, apakah Anda yakin memiliki data yang benar? Apakah Anda memiliki catatan yang cocok dengan kondisi di atas? - person jedrzej.kurylo; 25.07.2015
comment
Oke sekarang saya mengerti maksudnya. Ini berfungsi dengan baik. Sebenarnya saya kesulitan memahami cara kerja penghitungan hubungan dengan WhereHas. Saya telah menguji banyak kasus dan memainkannya selama beberapa waktu dan sekarang saya mendapatkan pemahamannya. Terima kasih banyak atas bantuan Anda. - person hhsadiq; 25.07.2015
comment
Saya mencari ini sepanjang hari hari ini, terima kasih masih membantu setelah 3 tahun :) - person Wasif Khalil; 08.09.2018
comment
Ini menggantung bagi saya, ada hasil 2K saya bertanya-tanya apakah itu ada hubungannya dengan itu. ini adalah solusi yang saya cari - person Harry Bosh; 26.08.2020