【问题标题】:Reverse polymorphic relation in Laravel 5Laravel 5中的反向多态关系
【发布时间】:2017-02-25 04:39:00
【问题描述】:

假设我们有以下模型:WarriorAxeSword

有没有办法使以下行为成为可能?

$warrior->weapon = $sword;
// ...

$warrior->weapon = $axe;
// ...

换句话说,是否可以将单独的模型视为使用 Eloquent 的相似类型

附言

显然,上面是一个问题的简化示例,仅用于传达问题的要点。

【问题讨论】:

  • 嗨,你有没有得到这个?我自己也有类似的情况

标签: laravel laravel-5 eloquent relationship


【解决方案1】:

是的,您可以将weapon 设为polymorphic relation。将列 weapon_typeweapon_id 添加到您的表中,这可以在具有 morphs 类型的迁移文件中完成:

Schema::table('warriors', function ($table) {
    $table->morphs('weapon');
});

现在您已准备好将您的关系添加到 Warrior 模型:

public function weapon() {
    return $this->morphTo();
}

就是这样!现在你可以添加武器了,Eloquent 会处理剩下的事情。该关系甚至支持急切加载。我建议你所有的武器都应该实现一个接口,这样你就知道它们有哪些共同的方法,但不幸的是,Eloquent 无法通过 PHP 类型系统为你强制执行该接口。

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 2016-05-26
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2014-05-24
    • 2019-01-22
    相关资源
    最近更新 更多