Laravel中创建多态字段名的规则是什么?

What is the rule to create a polymorphic field name in Laravel?

我不是第一次使用 Laravel 但这是我第一次 need/want 使用多态关系。 我在 Laravel.com 看到一个例子,它说我应该使用 'imageable_id' 到一个叫做 'images' 的 table ,在另一个例子中我看到 'commentable_id' 到 table 'comments'.

创建名字有规则吗?

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

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

例如,在帖子或设置上:

public function category()
{
    return $this->morphMany('App\Category', 'categoryable');
}

这样,您的模型将在 table 类别中搜索 categoryable_id 和 categoryable_type。默认情况下,categoryable_id 将匹配您的型号 ID,而 categoryable_type 将匹配您型号的 FQCN(例如 'App\Post')。

如果您想更改 Laravel 设置多态列名的方式,您可以使用相同方法的第 3 个和第 4 个参数设置它们,例如:

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