Laravel 8 嵌套延遲預(yù)加載 & morphTo

2021-07-19 11:41 更新

如果希望快速加載 morphTo 關(guān)系,以及該關(guān)系可能返回的各種實體上的嵌套關(guān)系,可以使用 loadMorph 方法。

這個方法接受 morphTo 關(guān)系的名稱作為它的第一個參數(shù),第二個參數(shù)接收模型數(shù)組、關(guān)系數(shù)組。為了幫助說明這個方法,可以看一下以下模型例子:

<?php

use Illuminate\Database\Eloquent\Model;

class ActivityFeed extends Model
{
    /**
     * 獲取 activity feed 記錄的父級
     */
    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)系,我們可以檢索 ActivityFeed 模型實例,并立即加載所有 parentable 模型及其各自的嵌套關(guān)系:

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號