Laravel éloquent sur la façon de rejoindre une requête
PHP中文网
PHP中文网 2017-05-16 16:51:58
0
6
1371

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 查询就可以过滤掉不符合的数据.
LaravelEloquent 目前我只查到withméthode

Ce besoin peut être facilement résolu grâce à YiiActiveRecord

$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中文网
PHP中文网

认证高级PHP讲师

répondre à tous(6)
習慣沉默

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 avecrails里都是有实现的
laravel 目前我看到的只有一个with

rails里有 preloadincludesEager loadJoins, 可以来区别eager loading数据的方式.
这里有篇文章来讲解
http://www.mamicode.com/info-...

YiiActiveRecord也有with, joinWith(inner join, left join ....) innerJoinWith, 来根据需求做eager loading

其他的我就不查了. 并不是我要损laravel, 我是到现在也没有觉得laravelEloquent

rails a précharge, inclut, Charge impatiente, Joins, vous pouvez venir ici Différentes manières de charger avec impatience les données.
Voici un article pour expliquer
http://www.mamicode.com/info-...🎜 🎜Et 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.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!