Annahme
One Piecethread
(帖子) 预加载 comments
(评论)和 comments.user
(Benutzer, der kommentiert hat)
Normalerweise können Sie es mit nur einer Codezeile erhalten
$thread = Thread::with('comments', 'comments.user')->first();
Das ist kein Problem und kann sehr gut abgefragt und angezeigt werden.
$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model
Aber die aktuelle Forderung lautet: Wenn Benutzerdaten, die einen Kommentar abgegeben haben, gelöscht werden, können die natürlich zugehörigen Kommentardaten nicht angezeigt werden, da sonst die Informationen unvollständig sind (ist das eine normale Forderung, oder?)
Dann gibt es logischerweise nur noch inner join
查询就可以过滤掉不符合的数据.Laravel
的Eloquent
目前我只查到with
Methode
Dieser Bedarf kann leicht gelöst werden durch Yii
的ActiveRecord
$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();
Ich bin damit nicht sehr vertraut, daher möchte ich einen Experten auf diesem Gebiet fragen, wie man es löst. Vielen Dank!Laravel
laravel中查询构建器中的join默认就是inner join的行为,手册是这么说的
Eloquent ORM没有直接的join查询条件,但也有变通方法,如楼上所说。
不过我一般不用ORM,因为性能原因。我用Query Builder。
在关系里写上join就好了,->hasMany()->join()->where() 想怎么写怎么写
其实我问的主要是用法, 这种需求很常见. 主要是问下有没有这方面的问题
这个在
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
强大在哪里