假設(shè)
一條thread
(帖子) 預(yù)加載 comments
(評(píng)論)和 comments.user
(評(píng)論的用戶)
通常一行代碼就可以取到
$thread = Thread::with('comments', 'comments.user')->first();
這個(gè)是沒有問題的,并且能很好的查詢并顯示出來(lái).
$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model
但是目前的需求是: 刪除一個(gè)評(píng)論過的用戶數(shù)據(jù), 那自然相關(guān)的評(píng)論數(shù)據(jù)也不能顯示 否則信息就不全(這是正常的需求吧?)
那按照邏輯來(lái)說 只要inner join
查詢就可以過濾掉不符合的數(shù)據(jù).Laravel
的Eloquent
目前我只查到with
方法
這個(gè)需求在Yii
的ActiveRecord
是可以通過來(lái)很方便解決的
$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();
Laravel
并不是很熟 所以想問問這方面的大牛如何來(lái)解決. 謝謝!
認(rèn)證高級(jí)PHP講師
laravel中查詢構(gòu)建器中的join默認(rèn)就是inner join的行為,手冊(cè)是這么說的
Eloquent ORM沒有直接的join查詢條件,但也有變通方法,如樓上所說。
不過我一般不用ORM,因?yàn)樾阅茉?。我用Query Builder。
在關(guān)系里寫上join就好了,->hasMany()->join()->where() 想怎么寫怎么寫
其實(shí)我問的主要是用法, 這種需求很常見. 主要是問下有沒有這方面的問題
這個(gè)在rails
里都是有實(shí)現(xiàn)的
而laravel
目前我看到的只有一個(gè)with
rails
里有 preload
、includes
、Eager load
、Joins
, 可以來(lái)區(qū)別eager loading
數(shù)據(jù)的方式.
這里有篇文章來(lái)講解
http://www.mamicode.com/info-...
而Yii
的ActiveRecord
也有with
, joinWith
(inner join, left join ....) innerJoinWith
, 來(lái)根據(jù)需求做eager loading
其他的我就不查了. 并不是我要損laravel
, 我是到現(xiàn)在也沒有覺得laravel
的Eloquent
強(qiáng)大在哪里