个人对with的用法,请大神帮忙看看

public function user()
    {
        return $this->hasOne(TestsCopy::class, 'tests_id', 'id')->select(['tests_id']);
    }

    public static function testWith(){
        $a = self::with(['user'])->select(['id','name'])->get()->toArray();
    }

一直没理解lavavel除了db类的left join 连表的方式以外还有什么其他方法,今天试了一下模型之间单个连表查询,打印的sql为

select `tests_id` from `tests_copy` where `tests_copy`.`tests_id` in (1, 2, 3) and `tests_copy`.`deleted_at` is null

最后给个人的感觉就是先把主表的数据查询出来后带入带附属表的in查询里面,如果理解不对的地方,还请各位大神指教

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 8

self::with(['user']) 的好处是 如果结果为多条,并且循环是调用了关联表的属性时不会在执行单条查询。我不知道我这么说你明白么,很多文档都有讲,例如查询结果为10条,如果不加with ,循环时$value->user->userName会走查询语句。而加了with 循环时$value->user->userName会在结果集中获取,不会再次查询。 我要是说错了,请帮忙纠错!

2年前 评论
ta_ta (楼主) 2年前
playmaker 2年前

看到这个问题虽然理解了,但有点费脑啊,定义的 user 却关联 TestsCopy::classtestWith 又是啥,怎么用的? with 就是字面意思,把根据定义的关联关系的查询结果附带上,不止 hasOne 还有 hasMany 等,dd 看一下

2年前 评论
ta_ta (楼主) 2年前
ta_ta (楼主) 2年前
php_yt (作者) 2年前
Epona

with 的查询方法就是 where id in (xxxx)

2年前 评论
flc1125

理解正确,我补充一点点:

1、从 Laravel 的 ORM 角度,这么操作的好处就是,即使查出来,每个数据也是一个 Model,方便数据的使用、更新、删除 2、从资源角度:每个数据就是一个对象,每个对象就是一个资源(数据资源),资源利于维护,也利于划分职责(更新、删除等)。资源就可以应用到其他组件(如:Laravel 的资源类、ORM等),但使用 Join 等,就不支持了

2年前 评论

with就是解决了join 联表查询出现的1+n问题

2年前 评论

with 是用来关联模型的, 和 join 不同。

2年前 评论

yes。很方便的,有些人不用的,老是会循环查库

2年前 评论

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