Можно ли перевести этот запрос "join" и "as" в функции Laravel PDO? - PullRequest
0 голосов
/ 27 февраля 2020

Я изо всех сил пытаюсь сделать этот SQL запрос на Laravel запрос PDO. Кто-нибудь знает, как я могу это сделать? (Особенно операторы 'AS' и названия в объединениях).

Запрос:

SELECT models.name         as model_name,
       models.brand        as model_brand,
       t.name              as trim_name,
       t.extra_information as trim_extra_information,
       t.price             as trim_price,
       t.popular           as trim_is_popular,
       s.type              as specification_type,
       s.value             as specification_value,
       o.name              as option_name,
       o.default           as option_default,
       o.remaining         as option_remaining,
       c.name              as color_name,
       c.hex_code          as color_hex_code,
       c.price_extra       as color_price_extra,
       ll.months           as lease_length_months,
       ll.default          as lease_length_default,
       ll.price_extra      as lease_length_price_extra,
       eo.name             as extra_option_name,
       eo.description      as extra_option_description,
       eo.price_total      as extra_option_price_total,
       eo.price_extra      as extra_option_price_extra,
       m.kilometers        as mileage_kilometers,
       m.default           as mileage_default,
       m.price_extra       as mileage_price_extra,
       m.price_extra_km    as mileage_price_extra_km

FROM `models`
         INNER JOIN trims t on models.id = t.model_id
         INNER JOIN specifications s on t.id = s.trim_id
         INNER JOIN options o on t.id = o.trim_id
         INNER JOIN colors c on t.id = c.trim_id
         INNER JOIN lease_lengths ll on t.id = ll.trim_id
         INNER JOIN extra_options eo on ll.id = eo.lease_length_id
         INNER JOIN mileages m on ll.id = m.lease_length_id

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Непосредственно используйте join() и select() метод, подобный этому:

Model::join('trims t', 'models.id', '=', 't.model_id')
     ->join('specifications s', 't.id', '=', 's.trim_id')
     ...
     ->select(
       'models.name         as model_name',
       'models.brand        as model_brand',
       't.name              as trim_name',
       't.extra_information as trim_extra_information',
       't.price             as trim_price',
       't.popular           as trim_is_popular',
       ...
     )
     ->get()
0 голосов
/ 27 февраля 2020

Если вы используете класс модели eloquent, называемый Model, он автоматически устанавливает запрос к таблице models.

Затем вы можете переопределить запрос по умолчанию в вашем классе Model, используя:

public function newQuery()
{
    return parent::newQuery()
        ->select(
            'models.name as model_name',
            ...
            'mileages.price_extra_km as mileage_price_extra_km'
        )
        ->join('trims', 'models.id', 'trims.model_id')
        ...
        ->join('mileages', 'lease_lengths.id', 'mileages.lease_length_id');

Заполните дополнительные строки, где я оставил тройные точки, и вы должны быть в пути.

Обратите внимание, что я удалил псевдонимы таблицы. Вы можете использовать псевдонимы таблиц, как в коде запроса SQL, но его проще и удобнее читать, чтобы не беспокоиться при использовании eloquent построителя запросов.

...