在 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 中创建多态字段名称的规则是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在表中创建单个字段的最佳方法是啥,旨在保持对不同表字段的计算