Laravel无法保存多态关系

时间:2018-10-07 10:25:36

标签: php laravel eloquent polymorphic-associations

我想在服务和不同类型的服务数据之间建立多态关系(在本例中为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约束。

有人知道如何解决这一部分,以便我可以保存多态关系吗?

预先感谢

1 个答案:

答案 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);

还要看一下many-to-many polymorphic relationships