我想在服务和不同类型的服务数据之间建立多态关系(在本例中为typo3_data)。
我有以下数据模型:
projects
--------
id
name
services
--------
id
type
project_id
data_type
data_id
typo3_data
--------
id
url
项目和服务具有简单的一对多关系。但是服务模型需要多态关系,因为存在不同类型的服务,并且在相应的表中需要不同的列。
我的服务模型如下:
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);
}
但是现在我得到一个错误,即对services.data_type的NOT NULL约束。
有人知道如何解决这一部分,以便我可以保存多态关系吗?
预先感谢
答案 0 :(得分:1)
save()
适用于HasMany
关系。请改用associate()
:
$data = TYPO3Data::create(['url' => 'http://example.com']);
$service = new Service(['type' => 'TYPO3']);
$service->data()->associate($data);
$project->services()->save($service);