Неоднозначное имя столбца laravel 5.6+ - PullRequest
0 голосов
/ 26 апреля 2020

У меня проблема с ошибкой под названием «Идентификатор столбца в списке полей неоднозначен».

Я пытался исправить это, используя псевдонимы для столбцов, но мне не повезло в его исправлении. Запрос выглядит так:

SELECT `id`               AS `pf_id`, 
       `id_feature`       AS `pf_if`, 
       `id_feature_value` AS `pf_ifv`, 
       `product_features`.`id_product` 
FROM   `features` 
       INNER JOIN `product_features` 
               ON `product_features`.`id_feature` = 
                  `features`.`pf_id` 
WHERE  `product_features`.`id_product` IN ( 
       33003, 33004, 33011, 33012, 
       33013, 33015, 33016, 33017, 
       33018, 33019, 33020, 33021, 
       33022, 33023, 33024, 33025, 
       33026, 33029, 33030, 33032 ) 
       AND `id_feature` = 5 

Идентификатор используется только в select и внутреннем соединении. Он вызывает таблицу product_features и таблицу функций. Только этот кусок кода не работает - любое другое отношение к продукту работает нормально Ниже приведены дополнительные сведения о структуре таблицы и отношении:

$products = Product::select('id', 'id as DT_RowId', 'id_manufacturer', 'sku', 'price_retail', 'active')
            ->with([
                'manufacturer' => function ($m) {
                    $m->with(['defaultTranslation' => function ($query) {
                        $query->select('id', 'id_manufacturer', 'name');
                    }]);
                },
                'defaultTranslation' => function ($dt) {
                    $dt->select('id', 'id_product', 'name');
                },
                'features' => function ($qf) {
                    $qf->select('id as pf_id', 'id_feature as pf_if', 'id_feature_value as pf_ifv');
                    $qf->where('id_feature', 5);
                },
            ]);

$result = $products->orderBy('id', 'DESC')->paginate($itemNumber, ['*'], 'page', $page);

структура product_features:

enter image description here

функции:

enter image description here

Особенности функции (функция от модели)

public function features()
    {
        return $this->hasManyThrough('App\SupremeShop\Models\Feature',
            'App\SupremeShop\Models\ProductFeature',
            'id_product',
            'id',
            'id',
            'id_feature');
    }

Спасибо за помощь!

1 Ответ

2 голосов
/ 26 апреля 2020

Всегда уточняйте ваши столбцы, например ...

SELECT pf.id pf_id
     , pf.id_feature pf_if
     , pf.id_feature_value pf_ifv
     , pf.id_product
  FROM features f
  JOIN product_features pf
    ON pf.id_feature = f.id 
 WHERE pf.id_product IN ( 
       33003, 33004, 33011, 33012, 
       33013, 33015, 33016, 33017, 
       33018, 33019, 33020, 33021, 
       33022, 33023, 33024, 33025, 
       33026, 33029, 33030, 33032 ) 
       AND pf.id_feature = 5 

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

...