我正在开展一个项目,我的桌面市场有一个buyer_id列和一个seller_id列。当卖家在市场上放置东西时,seller_id和buyer_id是相同的,这意味着该产品现在正在出售。销售后,buyer_id会更改为购买产品的人。
现在我在我的应用程序中显示所有待售产品的地方我正在通过Eloquent进行此查询:
$market_records = Market::where('seller_id', '!=', Auth::user()->id)->where('seller_id', '=', 'buyer_id')->get();
我只想要出售的产品不是由已登录的同一用户而且我想只拥有seller_id和buyer_id相同的产品。现在第二个where
语句中的问题是它将seller_id与字符串'buyer_id'
进行比较,这不是我想要的。只有这样我才能获取buyer_id等于seller_id
的记录。
答案 0 :(得分:17)
您需要使用whereRaw
来执行此操作:
$market_records = Market::where('seller_id', '!=', Auth::user()->id)
->whereRaw('seller_id = buyer_id')->get();
任何寻找此解决方案的人都要记住,因为Laravel 5.2可以使用whereColumn
方法,所以 Laravel 5.2及以上中的代码可能如下所示:
$market_records = Market::where('seller_id', '!=', Auth::user()->id)
->whereColumn('seller_id', 'buyer_id')->get();
您可以在this commit
中找到详细信息答案 1 :(得分:9)
在最近的Laravel版本中,您可以使用whereColumn
(docs):
$same = Market::whereColumn('seller_id', 'buyer_id')->get();
答案 2 :(得分:3)
选项1:->whereRaw('column1 = column2')
选项2:开始销售时buyer_id == null!= seller_id,->where('buyer_id', '=', null)