Как оптимизировать следующий запрос Laravel? - PullRequest
2 голосов
/ 02 августа 2020

У меня есть код, который работает отлично.

 $amenityCategoryMapping1 = AmenityCategoryMapping::where('property_id', $property->id)
    ->orderBy('amenity_name','asc')
    ->orderBy('updated_at','desc')
    ->pluck('category_id', 'amenity_name')->toArray();

$amenityCategoryMapping2 = AmenityCategoryMapping::where('company_id', $property->company_id)
    ->orderBy('amenity_name','asc')
    ->orderBy('updated_at','desc')
    ->pluck('category_id', 'amenity_name')->toArray();

$amenityCategoryMapping3 = AmenityCategoryMapping::whereNull('property_id')
    ->orderBy('amenity_name','asc')
    ->orderBy('updated_at','desc')
    ->pluck('category_id', 'amenity_name')->toArray();

$amenityCategoryMapping = array_merge($amenityCategoryMapping3, $amenityCategoryMapping2, $amenityCategoryMapping1 );

Однако в настоящее время я выполняю 3 разных запроса для извлечения данных из одной и той же таблицы, просто используя разные параметры. Есть ли способ свести к минимуму запросы этого запроса и по-прежнему получать те же результаты? . То есть приоритет должен быть отдан amenityCategoryMapping1

1 Ответ

1 голос
/ 02 августа 2020

Попробуйте использовать orWhere функцию

$amenityCategoryMapping1 = AmenityCategoryMapping::where('property_id', $property->id)
    ->orWhere('company_id', $property->company_id)
    ->orWhereNull('property_id')
    ->orderBy('amenity_name','asc')
    ->orderBy('updated_at','desc')
    ->pluck('category_id', 'amenity_name')->toArray();
...