通过Eloquent在laravel中找到两个具有相同值的列?

时间:2014-12-04 09:12:48

标签: mysql laravel-4 eloquent

我正在开展一个项目,我的桌面市场有一个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的记录。

3 个答案:

答案 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版本中,您可以使用whereColumndocs):

$same = Market::whereColumn('seller_id', 'buyer_id')->get();

答案 2 :(得分:3)

选项1:->whereRaw('column1 = column2')

选项2:开始销售时buyer_id == null!= seller_id,->where('buyer_id', '=', null)