Laravel eloquent with如何join查询
假设
一条thread
(帖子) 预加载 comments
(评论)和 comments.user
(评论的用户)
通常一行代码就可以取到
$thread = Thread::with('comments', 'comments.user')->first();
这个是没有问题的,并且能很好的查询并显示出来.
$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model
但是目前的需求是: 删除一个评论过的用户数据, 那自然相关的评论数据也不能显示 否则信息就不全(这是正常的需求吧?)
那按照逻辑来说 只要inner join
查询就可以过滤掉不符合的数据.Laravel
的Eloquent
目前我只查到with
方法
这个需求在Yii
的ActiveRecord
是可以通过来很方便解决的
$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();
Laravel
并不是很熟 所以想问问这方面的大牛如何来解决. 谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
用 has 可以搞定,子查询实现的,性能优化并没有达到最优,不过能接受
$thread = Thread::has('comments.user')->with('comments', 'comments.user')->first();
laravel中查询构建器中的join默认就是inner join的行为,手册是这么说的
在关系里写上join就好了,->hasMany()->join()->where() 想怎么写怎么写?
Eloquent ORM没有直接的join查询条件,但也有变通方法,如楼上所说。
不过我一般不用ORM,因为性能原因。我用Query Builder。
其实我问的主要是用法, 这种需求很常见. 主要是问下有没有这方面的问题
这个在
rails
里都是有实现的而
laravel
目前我看到的只有一个with
rails
里有preload
、includes
、Eager load
、Joins
, 可以来区别eager loading
数据的方式.这里有篇文章来讲解
http://www.mamicode.com/info-...
而
Yii
的ActiveRecord
也有with
,joinWith
(inner join, left join ....)innerJoinWith
, 来根据需求做eager loading
其他的我就不查了. 并不是我要损
laravel
, 我是到现在也没有觉得laravel
的Eloquent
强大在哪里