Hypothèse
One Piecethread
(帖子) 預加載 comments
(評論)和 comments.user
(utilisateur qui a commenté)
Habituellement, vous pouvez l'obtenir avec une seule ligne de code
$thread = Thread::with('comments', 'comments.user')->first();
Cela ne pose aucun problème, et cela peut être très bien interrogé et affiché.
$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model
Mais la demande actuelle est la suivante?: si les données d'un utilisateur qui ont commenté sont supprimées, les données de commentaire naturellement liées ne peuvent pas être affichées, sinon les informations seront incomplètes (est-ce une demande normale, n'est-ce pas??)
Alors logiquement, il n'y a que inner join
查詢就可以過濾掉不符合的數(shù)據(jù).Laravel
的Eloquent
目前我只查到with
méthode
Ce besoin peut être facilement résolu grace à Yii
的ActiveRecord
$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();
Je ne le connais pas très bien, je souhaite donc demander à un expert dans ce domaine comment le résoudre?!Laravel
認證高級PHP講師
La jointure dans le générateur de requêtes dans Laravel adopte par défaut le comportement de la jointure interne, le manuel le dit
$thread = Thread::with(['comments' => function ($query) {
$query->whereNotNull('user');
}, 'comments.user'])->first();
Eloquent ORM n'a pas de conditions de requête de jointure directe, mais il existe des solutions de contournement, comme mentionné ci-dessus.
Mais je n'utilise généralement pas ORM pour des raisons de performances. J'utilise le générateur de requêtes.
\DB::('threads')
->where(['threads.id'=>$id])
->leftJoin("comments",'therads.id','=','comments.tid')
->paginate()
écrivez simplement join in the relation, ->hasMany()->join()->where() Vous pouvez l'écrire comme vous le souhaitez.
En fait, ce que je demande concerne principalement l'utilisation. Ce type de demande est très courant. Je demande principalement s'il y a des questions à cet égard
. Ceci est implémenté dans rails
Et laravel
actuellement, je n'en vois qu'un seul avec
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
rails
a précharge
, inclut
, Charge impatiente
, Joins
, vous pouvez venir ici Différentes manières de charger avec impatience
les données.ActiveRecord
de Yii
a également with
, joinWith
(jointure interne, jointure gauche....) innerJoinWith
, pour effectuer un chargement rapide
selon les besoins??
??Je ne vérifierai pas d'autres choses. Ce n'est pas que je veuille endommager laravel
, mais je ne pense toujours pas que éloquent
de laravel
. est si puissant.