Оптимизация красноречивых реляционных запросов

#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