Laravel使用高级join关联3张表查询报strtolower参数错误如何解决
涉及表结构
- cart_items 表

- ecomm_products 表

- ecomm_sellers 表

报错原因
你调用Laravel查询构造器的join方法时参数传递不符合语法规范:join方法一次仅支持关联一张表,你的写法中同时传入两个表名作为前两个参数,第三个参数传入关联逻辑闭包,此时Laravel会误将闭包识别为关联操作符(如=、>等),底层尝试对操作符做小写转换时,就触发了strtolower(): Argument #1 ($string) must be of type string, Closure given报错。
修复方案
将三张表的关联逻辑拆分,分两次调用join方法分别关联ecomm_products和ecomm_sellers即可,修改后代码如下:
$result = DB::table('cart_items') ->join('ecomm_products', function($join){ $join->on('ecomm_products.id', '=', 'cart_items.product_id') ->where('cart_items.order_id', '=', 1); }) ->join('ecomm_sellers', 'ecomm_products.seller_id', '=', 'ecomm_sellers.id') ->where('cart_items.user_id', '=', Auth::user()->id) ->select('ecomm_products.product_name','ecomm_products.showcase_image','ecomm_products.selling_price','cart_items.quantity','cart_items.id') ->get();
内容的提问来源于stack exchange,提问作者shivam shukla
相关产品推荐
相关产品推荐

