搜尋

首頁  >  問答  >  主體

Laravel eloquent with如何join查詢

假設

一條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中文网2871 天前1415

全部回覆(6)我來回復

  • 習慣沉默

    習慣沉默2017-05-16 16:53:58

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

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:53:58

    雷雷

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:53:58

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 16:53:58

    雷雷

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:53:58

    在關係裡寫上join就好了,->hasMany()->join()->where() 想怎麼寫怎麼寫

    回覆
    0
  • 世界只因有你

    世界只因有你2017-05-16 16:53:58

    其實我問的主要是用法, 這種需求很常見. 主要是問下有沒有這方面的問題

    這個在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強大在哪裡

    回覆
    0
  • 取消回覆