请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
//在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回答

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

建议

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

  2. 直接写原生SQL查询

1 回复 有任何疑惑可以回复我~
  • 提问者 XING13 #1
    感谢老师,我还有个问题。我要做一张有查询条件的统计报表,数据量比较大,查询一次花费的时间就比较长了。我的第一想法是根据查询条件做缓存,但是这样假设A用户首先查询出有30条记录,在此时B用户进行操作后记录变成了31条,A用户在刚才的条件下第二次查询,因为条件没变那还是从缓存中查询出30条记录,A用户看到的数据就不准确了。这种情况的需求是不是不能用缓存,只能每次都重新从数据库查询?
    回复 有任何疑惑可以回复我~ 2020-10-15 16:10:12
  • 7七月 回复 提问者 XING13 #2
    这种其实是一个 缓存问题,涉及到更新缓存。通常是需要用redis来缓存数据的,但是这个缓存的数据需要被更新。也就是每次插入新数据后还要更新缓存
    回复 有任何疑惑可以回复我~ 2020-10-15 20:24:09
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号