Полиморфная модель переменных Laravel

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

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();
});

Какой у вас вопрос? В какой модели определяется block()?

Jonas Staudenmeir 29.05.2018 16:01

Я обновил полный код выше. У блока нет модели, я хочу, чтобы он брал модель из поля owner_type в db @JonasStaudenmeir, поэтому, например, area_blocks.id = 1 будет иметь блок $ area_block-> как запись db для App \ Models \ Title.id = 1

001221 29.05.2018 16:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Или переименуйте отношения:

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

легенда, которая работает, выбрали последнее, имеет смысл!

001221 29.05.2018 16:33

Другие вопросы по теме