【问题标题】:Laravel can't save polymorphic relationLaravel 无法保存多态关系
【发布时间】:2018-10-07 10:25:35
【问题描述】:

我想在服务和不同类型的服务数据之间建立多态关系(在这个例子中是它的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);
}

但现在我收到了一个错误,即 services.data_type 上的 NOT NULL 约束。

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

提前致谢

【问题讨论】:

    标签: php laravel eloquent polymorphic-associations


    【解决方案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。

    【讨论】:

    • 我试过这个,我得到了与save或associate完全相同的错误
    • @SpencerWilliams 请打开一个新问题。
    • 感谢@JonasStaudenmeir,它成功了。顺便说一句,你的“有很多深度”包也很棒。谢谢!
    猜你喜欢
    • 2015-02-15
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2014-09-02
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多