在 Laravel 中创建多态字段名称的规则是啥?

Posted

技术标签:

【中文标题】在 Laravel 中创建多态字段名称的规则是啥?【英文标题】:What is the rule to create a polymorphic field name in Laravel?在 Laravel 中创建多态字段名称的规则是什么? 【发布时间】:2015-12-19 22:30:08 【问题描述】:

我不是第一次使用 Laravel,但这是我第一次需要/想要使用多态关系。 我在 Laravel.com 上看到了一个示例,它说我应该将 'imageable_id' 用于名为 'images' 的表,在另一个示例中,我看到了 'commentable_id ' 到表 'cmets'

有创建名字的规则吗?

例如:我想创建一个表'category',用于'posts''settings'。在这种情况下,我应该使用 'categoryable_id' 作为名称吗?

【问题讨论】:

【参考方案1】:

没有规则,除了默认约定。默认情况下,您定义前缀,Laravel 将设置 _id 和 _type 后缀。该字段由您在关系中定义的内容确定:

例如,在帖子或设置上:

public function category()

    return $this->morphMany('App\Category', 'categoryable');

这样,您的模型将在表 Category 中搜索 categoryable_id 和 categoryable_type。 categoryable_id 默认将匹配您的模型 ID,而 categoryable_type 将匹配您模型的 FQCN(例如“App\Post”)。

如果你想改变 Laravel 设置多态列名的方式,你可以使用相同方法的第三个和第四个参数来设置,例如:

public function category()

    return $this->morphMany('App\Category', 'categoryable', 'model_type', 'model_id');

所以没有真正的规则。您可以随意定义它,也可以使用默认约定。

来源:http://laravel.com/docs/5.1/eloquent-relationships#many-to-many-polymorphic-relations

【讨论】:

以上是关于在 Laravel 中创建多态字段名称的规则是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在表中创建单个字段的最佳方法是啥,旨在保持对不同表字段的计算

在 Laravel 中创建模型时使用受保护的 $table 变量

仅获取今天在 laravel 中创建的记录

在迁移 laravel 5.2 中创建数据库视图

如何在 Laravel 5 中创建表迁移

在Laravel中创建记录后发送通知