多对多关联如何使用条件查询

来源:8-2 模型关联----定于关联与查询关联

XING13

2020-10-14

有三张表:product、theme、product_theme,多对多关联有没有类似haswhere的方法?该如何通过theme表的条件进行查询,并根据theme表的name排序?比如说我要查询商品名称包含“红色”,并且商品标签“衣服”的商品。

//在product模型中使用多对多关联theme
public function themes()
{
    return $this->belongsToMany('Theme', 'product_theme', 'te_id', 'pt_id');
}
// 查询---我这样查出来的数据并不对,应该如何查询?
ProductModel::with([
            'themes' => function ($query) {
                $query->alias('te')
                    ->hidden(['pivot', 'create_time', 'update_time', 'delete_time'])
                    ->where('name','=','衣服');
            }, 'materials'])
->where('name','like','红色')->select();


写回答

1回答

7七月

2020-10-14

这个应该是可以用子查询的,但是可能写起来会非常麻烦。

建议

  1. 先查询到内存中 做过滤

  2. 直接写原生SQL查询

1
2
7七月
回复
XING13
这种其实是一个 缓存问题,涉及到更新缓存。通常是需要用redis来缓存数据的,但是这个缓存的数据需要被更新。也就是每次插入新数据后还要更新缓存
2020-10-15
共2条回复

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程