Красноречивый запрос: идентификатор столбца неоднозначный

Я пытаюсь получить все строки таблицы с Eloquent, где идентификатор не находится в массиве $ids,

$product_deleteds = $category->products()->whereNotIn('id', $ids)->get();

Я получил эту ошибку:

SQLSTATE [23000]: Нарушение ограничения целостности: 1052 «Идентификатор столбца», где предложение неоднозначно

Запрос производить это:

Select *
from `products`
inner join `products_categories` on `products_categories`.`id` = `products`.`product_category_id`
where `products`.`deleted_at` is null
and `products_categories`.`restaurant_id` = 1
and `id` = 4 limit 1

Я знаю, что могу сделать мой запрос следующим образом:

$product_deleteds = $category->products()->whereNotIn('products.id', $ids)->get();

Но я не хочу, потому что название таблицы может измениться. Я мог бы к этому тоже, но это кажется немного сложным:

$product_deleteds = $category->products()->whereNotIn(Product::getTableName().'.id', $ids)->get();

Любая помощь ?

0

Решение

Во-первых, вы не могли этого сделать:

$product_deleteds = $category->products()->whereNotIn(
Product::getTableName() // no such method and definitely not static, unless you create one
.'.id', $ids)->get();

Но вы можете сделать это, чтобы избежать жесткого кодирования чего-либо:

$relatedKey = $category->products()->getRelated()->getQualifiedKeyName();

$product_deleteds = $category->products()->whereNotIn($relatedKey, $ids)->get();
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]