gpt4 book ai didi

Laravel - 如何设置 morphOne 关系

转载 作者:行者123 更新时间:2023-12-01 08:50:44 26 4
gpt4 key购买 nike

我正在尝试为类别实现可变形表,现在我有以下内容。

// 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 张 table , 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()' 的关系,我错过了什么?

最佳答案

对不起,我以为你想要多对多的关系。 morphOne关系API与morphMany相同来自 docs

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

关于Laravel - 如何设置 morphOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43771242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com