В моей базе данных есть следующая таблица:
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();
});
Я обновил полный код выше. У блока нет модели, я хочу, чтобы он брал модель из поля owner_type в db @JonasStaudenmeir, поэтому, например, area_blocks.id = 1 будет иметь блок $ area_block-> как запись db для App \ Models \ Title.id = 1






Вы должны указать имя / префикс столбца:
public function block()
{
return $this->morphTo('owner');
}
Или переименуйте отношения:
public function owner()
{
return $this->morphTo();
}
легенда, которая работает, выбрали последнее, имеет смысл!
Какой у вас вопрос? В какой модели определяется
block()?