我正在尝试为类别实现一个可变形表,现在我有以下内容。
// Snippet Table
- id
- title
- body
// Post Table
- id
- title
- body
// Category Table
- id
- name
我希望能够将帖子和片段变形为只有一个类别,如下所示:
// 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();
});
问题是,保存这种关系的正确方法是什么,我正在修补它,而attach($category_id)
和sync($category_id)
都没有保存他们返回错误的关系{{1我错过了什么?
答案 0 :(得分:8)
抱歉,我以为你想要多对多的关系。 morphOne
关系API与docs
morphMany
相同
Post extends Model
{
public function category() {
return $this->morphOne(Category::class, 'categorizable');
}
}
Category extends Model
{
public function categorizable() {
return $this->morphTo();
}
}
修改强>
使用morphOne时,您不需要删除数据透视表categorizables
表,并更改您的categories
表以包含变形字段
// Category Table
- id
- name
- categorizable_id
- categorizable_type