Laravel 8 嵌套預(yù)加載 morphTo 關(guān)聯(lián)

2021-07-19 11:40 更新

如果你希望加載一個 morphTo 關(guān)系,以及該關(guān)系可能返回的各種實體的嵌套關(guān)系,可以將 with 方法與 morphTo 關(guān)系的 morphWith 方法結(jié)合使用。 為了幫助說明這種方法,讓我們參考以下模型:

<?php

use Illuminate\Database\Eloquent\Model;

class ActivityFeed extends Model
{
    /**
     * 獲取活動提要記錄的父級
     */
    public function parentable()
    {
        return $this->morphTo();
    }
} 

在這個例子中,我們假設(shè) Event,PhotoPost 模型可以創(chuàng)建 ActivityFeed 模型。 另外,我們假設(shè) Event 模型屬于 Calendar 模型,Photo 模型與 Tag 模型相關(guān)聯(lián),Post 模型屬于 Author 模型。

使用這些模型定義和關(guān)聯(lián),我們可以查詢 ActivityFeed 模型實例并預(yù)加載所有 parentable 模型及其各自的嵌套關(guān)系:

use Illuminate\Database\Eloquent\Relations\MorphTo;

$activities = ActivityFeed::query()
    ->with(['parentable' => function (MorphTo $morphTo) {
        $morphTo->morphWith([
            Event::class => ['calendar'],
            Photo::class => ['tags'],
            Post::class => ['author'],
        ]);
    }])->get(); 
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號