首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在相关belongsToMany表中添加和保存字段

在相关belongsToMany表中添加和保存字段
EN

Stack Overflow用户
提问于 2021-05-29 22:33:25
回答 2查看 61关注 0票数 0

categorycategory_descriptiondescriptions是相关的:

代码语言:javascript
复制
public function descriptions(): BelongsToMany
{
    return $this->belongsToMany(Description::class);

}
代码语言:javascript
复制
public function categories(): BelongsTo {
    return $this->belongsTo(Category::class);
}

public function descriptions(): BelongsTo {
    return $this->belongsTo(Description::class);
}
代码语言:javascript
复制
public function descriptions(): BelongsToMany
    {
        return $this->belongsToMany(Category::class);

    }

分别在模型中。保存或更新时:

代码语言:javascript
复制
public function createOrUpdate(Category $category, Request $request)
    {
        $category->fill($request->get('category'))->save();

        $category->descriptions()->syncWithoutDetaching(
            $request->input('category.descriptions', [])
        );
    }

一个错误:

代码语言:javascript
复制
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'description' in 'field list' (SQL: insert into `category_description` (`category_id`, `description`, `description_id`, `is_active`, `meta-description`, `meta-h1`, `meta-keyword`, `meta-title`, `name`, `slug`) values (1, 41231231, 0, 1, 23, 124, 12, 12, 12333312, 74))

也许我错过了什么,因为没有太多的经验。

更新:

一个类别可以有多个条目,但说明只有一个父项。重写-一对多(多态):

代码语言:javascript
复制
public function descriptions()
    {
        return $this->morphMany(Description::class, 'descriptable');
    }
代码语言:javascript
复制
public function descriptable()
    {
        return $this->morphTo();
    }

保存一条记录没有问题,但是如何同时更新多条记录呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-29 23:17:02

怎么样?

代码语言:javascript
复制
// Category Model.

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    public function descriptions()
    {
        return $this->belongsToMany(Description::class)
            ->using(CategoryDescription::class);
    }
}
代码语言:javascript
复制
// Description Model.

use Illuminate\Database\Eloquent\Model;

class Description extends Model
{

    protected $fillable = [
        "name",
        "description",
        "meta-title",
        "meta-description",
        "meta-keyword",
        "meta-h1",
        "slug",
        "is_active",
    ];

    public function categories()
    {
        return $this->belongsToMany(Category::class)
            ->using(CategoryDescription::class);
    }
}
代码语言:javascript
复制
// Intermediate Model.

use Illuminate\Database\Eloquent\Relations\Pivot;

class CategoryDescription extends Pivot
{

    protected $table = "category_description";
    public $incrementing = true;

    public function category()
    {
        return $this->belongsTo(Category::class, "category_id", "id");
    }

    public function description()
    {
        return $this->belongsTo(Description::class, "description_id", "id");
    }
}
代码语言:javascript
复制
// createOrUpdate method.

public function createOrUpdate(Category $category, Request $request)
{
    $category->fill($request->get('category'))->save();

    $description = Description::create(
        Arr::collapse($request->input('category.descriptions', []))
    );

    $category->descriptions()->syncWithoutDetaching(
        $description->id
    );
}

备注:

尽管这可能对你很有效,但我个人认为你在这里没有多对多的关系。我相信一对多的关系就足够了。

票数 0
EN

Stack Overflow用户

发布于 2021-05-29 23:56:10

问题是您发送的数据要插入到找不到的列中

您应该只发送需要插入到表中的数据

因此,在您的示例中,您应该将函数编写为

代码语言:javascript
复制
$category->descriptions()->syncWithoutDetaching($description_id); // the id of the description you want to attach with this category

如果您在数据库中仍然没有描述,并且您正在使用相同的请求创建它,那么您可以这样做

代码语言:javascript
复制
Description::create(['columnName'=>$request->get('columnName'),'columnName2'=>$request->get('columnName2')])->id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67752557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档