laravel在循环里面使用模型为什么变了?

这是test表结构和数据
laravel在循环里面使用模型为什么变了?
这是cid表结构和数据
laravel在循环里面使用模型为什么变了?

我在控制器里面写这些代码,$this->model 是test表模型

$list = $this->model->leftjoin('cid', 'cid.id','=','test.cid');
        $arr = [0,1];
        $name = ['one','two'];
        DB::connection()->enableQueryLog();
        foreach ($arr as $a) {
            foreach ($name as $n) {
                $ids = $list->where('test.name', $n)->value('cid.name');
                print_r(DB::getQueryLog());
                echo $ids;
            }
        }

我打印的sql语句,里面为什么有两个where tset.name = ? 感觉是把上一个的又加上了?这是为什么呢?
laravel在循环里面使用模型为什么变了?
打印 $ids 只打印出一个:第一个,应该有四个才对的呀?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

改成这样

$list = $this->model->leftjoin('cid', 'cid.id','=','test.cid');
        $arr = [0,1];
        $name = ['one','two'];
        DB::connection()->enableQueryLog();
        foreach ($arr as $a) {
            foreach ($name as $n) {
                $ids = (clone $list)->where('test.name', $n)->value('cid.name');
                print_r(DB::getQueryLog());
                echo $ids;
            }
        }
1年前 评论
讨论数量: 5

$list->where('test.name', $n)->value('cid.name');

改成:(clone $list)->where('test.name', $n)->value('cid.name');

1年前 评论

改成这样

$list = $this->model->leftjoin('cid', 'cid.id','=','test.cid');
        $arr = [0,1];
        $name = ['one','two'];
        DB::connection()->enableQueryLog();
        foreach ($arr as $a) {
            foreach ($name as $n) {
                $ids = (clone $list)->where('test.name', $n)->value('cid.name');
                print_r(DB::getQueryLog());
                echo $ids;
            }
        }
1年前 评论

因为是面向对象编程啊

1年前 评论
donggan (楼主) 1年前
goStruct

因为对象相当于一个引用,你每次操作就是操作同一个地址,所以后一次会覆盖前一次的值

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!