laravel - Laravel 5 中的反向多态关系

标签 laravel laravel-5 eloquent relationship

假设我们有以下模型:一个Warrior、一个Axe和一个Sword

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

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

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

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

附注

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

最佳答案

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

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

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

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

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

关于laravel - Laravel 5 中的反向多态关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065320/

相关文章:

javascript - 在 Laravel 中从 JavaScript 调用模型函数

php - 带有 vagrant 数据库迁移的 Laravel 4 "using password NO"重置

php - Laravel 5.1 - 如何从 S3 存储桶下载 pdf 文件

mysql - 在 Laravel 中使用 key 环

laravel - 我在 laravel 中创建 View 有什么问题

laravel - 将 recaptcha 添加到默认的 Laravel 密码重置

php - Laravel 5.2 在 Azure 上出现奇怪的错误

php - 无法通过 Composer 安装 laravel 安装程序

mysql - Eloquent 查询不能正常工作

php - Laravel 5.1 多对多关系中的 Where 条件