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
查詢就可以過濾掉不符合的數(shù)據(jù).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
認證高級PHP講師
$thread = Thread::with(['comments' => function ($query) {
$query->whereNotNull('user');
}, 'comments.user'])->first();
Eloquent ORM沒有直接的join查詢條件,但也有變通方法,如樓上所說。
不過我一般不用ORM,因為性能原因。我用Query Builder。
\DB::('threads')
->where(['threads.id'=>$id])
->leftJoin("comments",'therads.id','=','comments.tid')
->paginate()
其實我問的主要是用法, 這種需求很常見. 主要是問下有沒有這方面的問題
這個在rails
里都是有實現(xiàn)的
而laravel
目前我看到的只有一個with
rails
里有 preload
、includes
、Eager load
、Joins
, 可以來區(qū)別eager loading
數(shù)據(jù)的方式.
這里有篇文章來講解
http://www.mamicode.com/info-...
而Yii
的ActiveRecord
也有with
, joinWith
(inner join, left join ....) innerJoinWith
, 來根據(jù)需求做eager loading
其他的我就不查了. 并不是我要損laravel
, 我是到現(xiàn)在也沒有覺得laravel
的Eloquent
強大在哪里