假設
一條thread
(帖子) 預先載入 comments
(評論)和 comments.user
(評論的使用者)
通常一行程式碼就可以取到
$thread = Thread::with('comments', 'comments.user')->first();
這個是沒有問題的,並且能很好的查詢並顯示出來.
$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model
但是目前的需求是: 刪除一個評論過的使用者資料, 那自然相關的評論資料也不能顯示 否則資訊就不全(這是正常的需求吧?)
那按照邏輯來說只要inner join
查詢就可以過濾掉不符合的資料.Laravel
的Eloquent
目前我只查到with
方法
這個需求在Yii
的ActiveRecord
是可以透過來很方便解決的
$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();
Laravel
並不是很熟 所以想問這方面的大牛如何來解決. 謝謝!
laravel中查詢建構器中的join預設就是inner join的行為,手冊是這麼說的
雷雷
Eloquent ORM沒有直接的join查詢條件,但也有變通方法,如樓上所說。
不過我通常不用ORM,因為效能原因。我用Query Builder。
雷雷
在關係裡寫上join就好了,->hasMany()->join()->where() 想怎麼寫怎麼寫
其實我問的主要是用法, 這種需求很常見. 主要是問下有沒有這方面的問題
這個在
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
強大在哪裡