Найдите два столбца в 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)