Laravel查询未分配到指定分类的产品实现方法求助
问题分析
- 你调用
get()方法获取的$assignations是模型集合,不是单个模型对象,直接访问$assignations->id属于非法操作,会抛出错误 - 子查询逻辑错误:你不需要再查询
variants表,只需要从assignations表中取出指定分类下已分配的产品ID即可
正确实现代码
// 直接用子查询实现,性能更优,只执行一次SQL查询 $no_variants_assigned = Variant::whereNotIn('id', function ($query) use ($id) { $query->select('product_id') // 此处替换为你assignations表中关联产品ID的实际字段名 ->from('assignations') ->where('category_id', $id); })->orderBy('id_product', 'Asc')->get(); // 如果你同时需要拿到当前分类下已分配的分配记录,可以用以下写法 $assignations = Assignation::where('category_id', $id)->orderBy('position', 'Asc')->get(); $assignedIds = $assignations->pluck('product_id'); // 同上替换为实际关联字段名 $no_variants_assigned = Variant::whereNotIn('id', $assignedIds) ->orderBy('id_product', 'Asc') ->get();
补充说明
如果你的assignations表关联的产品ID字段名不是product_id,将代码中的对应字段替换为你实际的字段名即可。
内容的提问来源于stack exchange,提问作者martibellot
相关产品推荐
相关产品推荐

