如何在Laravel中按条件关联多表获取交易记录的国家字段
等价的Laravel查询语句
你可以用Laravel的查询构造器或者Eloquent模型实现和给定SQL等价的逻辑,以下是两种常见写法:
查询构造器写法
DB::table('transactions') ->leftJoin('advertisements', 'advertisements.id', '=', 'transactions.post_id') ->leftJoin('offerrequests', 'offerrequests.id', '=', 'transactions.post_id') ->selectRaw("transactions.id, IF(transactions.is_sell = '1', advertisements.country, offerrequests.country) AS country") ->get();
Eloquent模型写法
假设你已经创建了对应的数据模型(Transaction、Advertisement、OfferRequest),可以这样写:
Transaction::query() ->leftJoin('advertisements', 'advertisements.id', '=', 'transactions.post_id') ->leftJoin('offerrequests', 'offerrequests.id', '=', 'transactions.post_id') ->selectRaw("transactions.id, IF(transactions.is_sell = '1', advertisements.country, offerrequests.country) AS country") ->get();
补充说明
如果更倾向于拆分式写法,也可以用select配合DB::raw替代selectRaw,效果完全一致:
->select( 'transactions.id', DB::raw("IF(transactions.is_sell = '1', advertisements.country, offerrequests.country) AS country") )
内容的提问来源于stack exchange,提问作者Chippy Thomas
相关产品推荐
相关产品推荐

