Heim > Fragen und Antworten > Hauptteil
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
给我你的怀抱2017-05-16 16:53:58
$thread = Thread::with(['comments' => function ($query) {
$query->whereNotNull('user');
}, 'comments.user'])->first();
巴扎黑2017-05-16 16:53:58
Eloquent ORM没有直接的join查询条件,但也有变通方法,如楼上所说。
不过我一般不用ORM,因为性能原因。我用Query Builder。
PHP中文网2017-05-16 16:53:58
\DB::('threads')
->where(['threads.id'=>$id])
->leftJoin("comments",'therads.id','=','comments.tid')
->paginate()
世界只因有你2017-05-16 16:53:58
其实我问的主要是用法, 这种需求很常见. 主要是问下有没有这方面的问题
这个在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
强大在哪里