Laravel eloquent with如何join查詢
PHP中文网
PHP中文网 2017-05-16 16:51:58
0
6
1409

假設

一條thread(帖子) 預先載入 comments(評論)和 comments.user (評論的使用者)

通常一行程式碼就可以取到

$thread = Thread::with('comments', 'comments.user')->first();

這個是沒有問題的,並且能很好的查詢並顯示出來.

$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model

但是目前的需求是: 刪除一個評論過的使用者資料, 那自然相關的評論資料也不能顯示 否則資訊就不全(這是正常的需求吧?)

那按照邏輯來說只要inner join 查詢就可以過濾掉不符合的資料.
LaravelEloquent 目前我只查到with方法

這個需求在YiiActiveRecord 是可以透過來很方便解決的

$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();

Laravel並不是很熟 所以想問這方面的大牛如何來解決. 謝謝!

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(6)
習慣沉默

laravel中查詢建構器中的join預設就是inner join的行為,手冊是這麼說的

给我你的怀抱

雷雷

巴扎黑

Eloquent ORM沒有直接的join查詢條件,但也有變通方法,如樓上所說。
不過我通常不用ORM,因為效能原因。我用Query Builder。

洪涛

雷雷

巴扎黑

在關係裡寫上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強大在哪裡

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板