Переменная модель Laravel полиморфная - PullRequest
0 голосов
/ 29 мая 2018

В моей базе данных есть следующая таблица:

table area_blocks;

id
owner_type
owner_id
created_at
updated_at

в поле owner_type оно имеет имя Eloquent Model, а owner_id - это идентификатор этой модели в базе данных.Пример:

db: area_blocks

id | owner_type            | owner_id 
1  | App\Models\Title      | 3 
2  | App\Models\Title      | 4
3  | App\Models\Textarea   | 1

Так что я ожидаю, что когда я получу все это, я также буду стремиться загрузить соответствующее поле из красноречивой модели, хранящейся в owner_type.

Есть ли красноречивая связьчто может вернуть эту запись из поля owner_type, используя нетерпеливую загрузку?Я пробовал $this->morphTo(), например,

public function block()
{
    return $this->morphTo();
}

, но возвращается как null.Есть идеи, как это можно сделать?

Пример кода;

<?php


namespace App\Models;

use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Model;

class AreaBlocks extends Model
{

    protected $with = ['block'];

    public function block()
    {
        return $this->morphTo();
    }
}

Route::get('/', function(){
    return App\Models\AreaBlocks::all();
});

1 Ответ

0 голосов
/ 29 мая 2018

Вы должны указать имя / префикс столбца:

public function block()
{
    return $this->morphTo('owner');
}

Или переименовать отношение:

public function owner()
{
    return $this->morphTo();
}
...