【发布时间】:2017-10-01 22:42:22
【问题描述】:
我正在尝试为类别实现可变形表,现在我有以下内容。
// Snippet Table
- id
- title
- body
// Post Table
- id
- title
- body
// Category Table
- id
- name
我希望能够将帖子和 sn-ps 变形为只有一个类别,如下所示:
// Categorizable Table
- category_id
- categorizable_id
- categorizable_type
对于这个可分类的表格,我是否必须有另一个模型?或者有一种方法可以在没有其他模型的情况下设置它?
到目前为止我有这个
class Snippet extends Model
{
public function category()
{
return $this->morphOne(Category::class, 'categorizable');
}
}
class Post extends Model
{
public function category()
{
return $this->morphOne(Category::class, 'categorizable');
}
}
class Category extends Model
{
public function categorizable()
{
return $this->morphTo();
}
}
我有 4 个表,snippets、posts、categories、categorizables,最后一个迁移看起来像这样。
Schema::create('categorizables', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('category_id');
$table->morphs('categorizable');
$table->timestamps();
});
问题是,保存这种关系的正确方法是什么,我正在 tinker 上对其进行测试,attach($category_id) 和 sync($category_id) 都没有保存关系,它们返回错误 BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::categorizable()',我是什么我失踪了?
【问题讨论】:
-
@yazfield 文档显示了一个 morphToMany,但事实并非如此,我需要一个 morphOne,以一对一的多态关系。
标签: laravel eloquent polymorphism relationship