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

Roh*_*han 13 mysql eloquent laravel-4

我正在开发一个项目,我有一个包含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();
Run Code Online (Sandbox Code Playgroud)

我只想要出售的产品不是由同一用户登录过,我想只有那些sell_id和buyer_id相同的产品.现在第二个where语句中的问题是它将seller_id与'buyer_id'不是我想要的字符串进行比较.我只能获取buyer_id等于的记录的方式是什么seller_id.

Mar*_*łek 23

你需要用whereRaw它来做:

$market_records = Market::where('seller_id', '!=', Auth::user()->id)
                         ->whereRaw('seller_id = buyer_id')->get();
Run Code Online (Sandbox Code Playgroud)

任何寻找此解决方案的人都要记住,因为Laravel 5.2可以使用whereColumn方法代替,所以Laravel 5.2及以上的代码可能如下所示:

$market_records = Market::where('seller_id', '!=', Auth::user()->id)
                         ->whereColumn('seller_id', 'buyer_id')->get();
Run Code Online (Sandbox Code Playgroud)

您可以在此提交中找到详细信息


bry*_*ams 11

在最近的Laravel版本中,您可以使用whereColumn(docs):

$same = Market::whereColumn('seller_id', 'buyer_id')->get();
Run Code Online (Sandbox Code Playgroud)