2017-07-24 168 views
2

我在我的Laravel 5.4應用程序中遇到了一些問題,在我的數據庫中,我有幾個實體通過名爲的內部模型這樣的中心模型相關。如何通過Laravel中的數據透視表獲取相關模型?

Actor  -> actors_contents  -> Content 
Category -> categories_contents -> Content 

然後,我有三個是「內容」之類的視頻,照片等其他實體...

Video (content_id) -> Content 
Photo (content_id) -> Content 
Stream (content_id) -> Content 

我想是可以的,比如所有的訪問對於來自Actor模型的特定演員的視頻,同時也能夠直接獲得視頻模型內的演員。

因此,從數據透視表中獲取當前Actor的content_id,然後找到匹配它的視頻。

我試圖使用hasManyThrough但在閱讀了一段時間後,我發現它不適用於多對多的關係,所以我的問題是我該如何使這項工作,否則呢? 我不想要定義我自己的關係或類似的東西,我可以猜測在模型上創建一個方法,只是做一些連接來獲得我想要的值,但是當比較時,這會在幕後產生影響Laravel的關係?

對於一個

->with(['relation']) 

不會同意這種關係,因此我就不能急於加載它,這可能是有點問題,所以如何將你們解決這個不再起作用問題? 非常感謝您的幫助。

回答

2

我想要的是能夠,例如,訪問所有的影片的特定演員要做到這一點是使用

一種方式whereHas()

$actorName = 'John Travolta'; 
Video::whereHas('content', function ($q) use ($actorName) { 
     $q->whereHas('actors', function ($q) use ($actorName) { 
      $q->where('name', $actorName); 
     }); 
    })->get(); 
+0

那工作,但這意味着我不能急於加載的關係,並將不得不創建一個額外的包裝類或存儲庫的自定義查詢,如果沒有其他選項,那麼我將不得不這樣做,但它是不幸的 – JonnySerra

+0

@JonnySerra你可以渴望加載數據。只需在查詢中添加「with()」即可。 –

相關問題