Найдите два столбца в laravel, которые имеют равные значения через Eloquent?
Я работаю над проектом, где у меня есть стол, на котором есть столбец buyer_id и столбец seller_id. Когда продавец ставит что-то на рынок, продавцы и покупатель_ид одинаковы, что означает, что продукт продается прямо сейчас. После продажи покупатель_ид переходит на того, кто купил продукт.
Теперь место в моем приложении, где я показываю все продукты для продажи, я делаю этот запрос через Eloquent:
$market_records = Market::where('seller_id', '!=', Auth::user()->id)->where('seller_id', '=', 'buyer_id')->get();
Я хочу только продукты для продажи, которые не принадлежат одному и тому же пользователю, который вошел в систему, и я хочу иметь только те продукты, в которых продавец_и_ид и покупатель_ид одинаковы. Теперь проблема во втором выражении where
заключается в том, что он сравнивает seller_id с строкой 'buyer_id'
, которая не является тем, что я хочу. Что такое способ, с помощью которого я могу получить только записи, где buyer_id равен seller_id
.
Ответы
Ответ 1
Вам нужно использовать whereRaw
чтобы сделать это:
$market_records = Market::where('seller_id', '!=', Auth::user()->id)
->whereRaw('seller_id = buyer_id')->get();
Любой, кто ищет это решение, whereColumn
, что после Laravel 5.2 можно использовать метод whereColumn
, поэтому приведенный выше код в Laravel 5.2 и выше может выглядеть следующим образом:
$market_records = Market::where('seller_id', '!=', Auth::user()->id)
->whereColumn('seller_id', 'buyer_id')->get();
Вы можете найти детали в этом коммите
Ответ 2
В последних версиях Laravel вы можете использовать whereColumn
(docs):
$same = Market::whereColumn('seller_id', 'buyer_id')->get();
Ответ 3
Вариант 1: ->whereRaw('column1 = column2')
Вариант 2: Когда продается покупатель_id == null!= продавец_id, ->where('buyer_id', '=', null)