繁体   English   中英

在 laravel 中同步 function 未按预期工作

[英]Sync function in laravel not working as expected

我有一个编辑表单,它应该使用选定的类别更新活动,但同步 function 没有按预期工作。

它将选定的复选框添加到数据库中,但不会删除旧值。 导致 pivot 表中有多个相同的值。

表格代码:

<p class="activiteit-categorie">
                <label>categorie</label>
                @foreach ($categories as $categorie)
                    <div class="categorie-input">
                        <input type="checkbox" name="categories[]" value="{{ $categorie->id }}"><label for="categorie">{{$categorie->name}}</label><br>
                    </div>
                @endforeach
            </p>

controller 代码:

if ($request->has('categories')) {
            $activiteit->categorie()->sync($request->input('categories'));
    } else {
        $activiteit->categorie()->detach($request->input('categories'));
    }

    return redirect()->route('active-overview')->with('message', 'Activiteit is succesvol aangepast!');

型号类别:


namespace App;

use Illuminate\Database\Eloquent\Model;

class categorie extends Model
{
    protected $fillable = [
        'name'
    ];

    public function activiteit() {
        return $this->BelongsToMany('App\activiteit');
    }
}

model 活动:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class activiteit extends Model
{
    protected $fillable = [
        'name', 'image', 'intro', 'goal', 'traject', 'extra_info', 'duration', 'price'
    ];

    public function categorie() {
        return $this->belongsToMany('App\categorie');
    }
}

你可以试试这个

class categorie extends Model{

    protected $fillable = [
        'name'
    ];

    public function activiteit() {
        return $this->BelongsToMany('App\activiteit','pivot_table_name','categorie_id','activiteit_id');
    }
}

像这样使用另一个 Model

if ($request->has('categories')) {
    $activiteit->categorie()->sync($request->categories);
} else {
    $activiteit->categorie()->detach($request->categories);
}

这对我来说可以

所以在尝试了一些东西之后,我想出了一个简单的解决方案来解决我的问题。

我首先从所选活动中分离所有类别,然后将所选类别添加到 pivot 表中。

$activiteit->categorie()->detach();

    if ($request->has('categories')) {
            $activiteit->categorie()->sync($request->categories);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM