mgsmus
Hocam selam tekrardan. Son olarak bir şey soracağım. Anlamak adına ona göre ilerleyeceğim.
$pairings = IntegrationProductMatches::where(function ($query) use ($columns, $search) {
foreach ($columns as $i => $column) {
/*if ($i === 0) {
$query->whereJsonContains($column, $search);
continue;
}*/
//$query->orWhereJsonContains($column, $search);
}
})
->orWhereHas("product", function ($query) use ($search) {
$query->where("productCode", "LIKE", "'%" . $search . "%'");
})
->orWhereHas("category", function ($query) use ($search) {
$query->whereRaw('JSON_SEARCH(pParentCategories, "all", \'"%' . $search . '%"\')');
})
->get()
->all();
Şimdi sadece :
->orWhereHas("product", function ($query) use ($search) {
$query->where("productCode", "LIKE", "'%" . $search . "%'");
})
Bu kısım olursa sistem çalışıyor.
->orWhereHas("category", function ($query) use ($search) {
$query->whereRaw('JSON_SEARCH(pParentCategories, "all", \'"%' . $search . '%"\')');
})
Bu kısım işin içine girince yani jsonb kısmı aramaya girince sistem boşa dönüyor. Sadece bu kısmı sqlde ve https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html buradaki örnekler üzerinde denediğimde yollarını veriyor.
Örnek bir çıktı "$[2]" şeklinde oluyor. JSON_SEARCH ibaresi tüm yolları veya bulamazsa null çıktı veriyor.
Bu yollar baz alındığında whereHas kısmı neyi kontrol ediyor ? null veya bu değer geliyor ise whereHas true veya false değer alması gerekmiyor mu ?
Buradaki ilişkiyi anlamaya çalışıyorum da