Laravel weiß eloquent, wie man einer Anfrage beitritt
PHP中文网
PHP中文网 2017-05-16 16:51:58
0
6
1388

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

Dieser Bedarf kann leicht gelöst werden durch YiiActiveRecord

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

认证高级PHP讲师

Antworte allen(6)
習慣沉默

laravel中查询构建器中的join默认就是inner join的行为,手册是这么说的

给我你的怀抱
$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() 
巴扎黑

在关系里写上join就好了,->hasMany()->join()->where() 想怎么写怎么写

世界只因有你

其实我问的主要是用法, 这种需求很常见. 主要是问下有没有这方面的问题

这个在rails里都是有实现的
laravel 目前我看到的只有一个with

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

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage