Я хочу иметь полиморфную связь между сервисами и различными типами сервисных данных (в данном примере это typo3_data).
У меня есть следующая модель данных:
projects
--------
id
name
services
--------
id
type
project_id
data_type
data_id
typo3_data
--------
id
url
Проектыи сервисы имеют простое отношение OneToMany.Но модель сервиса нуждается в полиморфном отношении, потому что существуют разные виды сервисов, которым нужны разные столбцы в соответствующей таблице.
Моя модель сервиса выглядит следующим образом:
class Service extends Model
{
public function project()
{
return $this->belongsTo(Project::class);
}
public function data()
{
return $this->morphTo('data');
}
}
Модель TYPO3Data выглядитнапример:
class TYPO3Data extends Model
{
protected $table = 'typo3_data';
public function service()
{
return $this->morphOne(Service::class, 'data');
}
}
В настоящее время я пытаюсь сохранить данные в службе следующим образом (упрощенно):
public function store(Project $project)
{
$service = new Service(['type' => 'TYPO3']);
$service->data()->save(new TYPO3Data(['url' => 'http://example.com']));
$project->services()->save($service);
}
Но теперь я получаю сообщение об ошибке с ограничением NOT NULL для служб.data_type.
Кто-нибудь знает, как решить эту часть, чтобы я мог сохранить полиморфное отношение?
Заранее спасибо