#laravel #eloquent #model
#laravel #eloquent #Модель
Вопрос:
Мы рассматриваем возможность оптимизации наших запросов Laravel Eloquent на нашей странице поиска, количество выполняемых запросов сократилось до значительного числа.
Однако мы видим согласованный запрос, который выполняется на основе отношения. Этот запрос :
select * from `property_types` where `property_types`.`id` = 7 limit 1
Этот запрос выполняется, если для каждого свойства есть уникальный тип свойства.
Я взглянул на запросы has и with в Laravel.
Связь установлена :
public function type()
{
return $this->belongsTo('AppModelsPropertyType', 'property_type_id', 'id');
}
Мы создаем заголовок свойства и URL-адрес, используя связь, поэтому для URL-адреса мы используем :
public function getUrlAttribute($pdf = false)
{
$property_route = ($pdf) ? 'property-pdf' : 'property';
// Format: /property/[NUMBER OF BEDS]-bed-[PROPERTY TYPE]-[FOR-SALE / TO-RENT]-in-[CITY]/[PROPERTY ID]
$items = [];
if ($this->beds) $items[] = $this->beds.' bed';
$items[] = $this->type->name ?? 'property';
}
Таким образом, каждый раз, когда найдено совпадающее свойство, оно возвращается к этой связи, и мы видим, что запрос property_types выполняется до 15 раз на страницу.
Есть ли какие-либо предложения по оптимизации этого?
Комментарии:
1. Вы пробовали быструю загрузку ?
2. просто, когда вы делаете выбор, добавьте один простой -> with(«ИМЯ ОТНОШЕНИЯ»), он предварительно загрузит отношения
3. как сказал @acvi, вам лучше проверить и использовать eager loading: ссылка здесь . Это уменьшит количество запросов и решит проблему N 1