使用复选框更新数据透视表

时间:2019-07-05 21:35:55

标签: laravel eloquent

我有一个用户表和一个服务表。我制作了很多数据透视表来存储哪些用户提供哪些服务。当我尝试在个人资料刀片中选中或取消选中服务复选框以修改用户时,数据将不会插入或删除数据透视表。

用户模型:

public function services(){
        return $this->belongsToMany(Service::class);
    }

服务模型:

public function user(){
        return $this->belongsToMany(User::class);
    }

我在ProfileController中存储功能中的代码:

$user = Auth::user();
    if(isset($request->services)){
                foreach($request->services as $service_id){
                    $service=Service::find($service_id);
                    $service->user()->syncWithoutDetaching($user->id);
                }
        }

刀片:

<div class="form-group row">
        <label class="col-md-4 col-form-label text-md-right">Type de services</label>

            <label for="peinture">Peinture</label>
            <input type="checkbox" id="peinture" name="services[]" value="1" 
            <?php if (in_array(1, $services->toArray())) echo "checked" ?> >

            <label for="neige">Déneigement</label>
            <input type="checkbox" id="neige" name="services[]" value="2"
            <?php if (in_array(2, $services->toArray())) echo "checked" ?> >

            <label for="gardiennage">Gardiennage</label>
            <input type="checkbox" id="gardiennage" name="services[]" value="3"
            <?php if (in_array(3, $services->toArray())) echo "checked" ?> >

            <label for="entretien">Entretien paysager</label>
            <input type="checkbox" id="entretien" name="services[]" value="4"
            <?php if (in_array(4, $services->toArray())) echo "checked" ?> >
    </div>

如果我做dd($ request);一切似乎都在里面。不知道我在做什么错,谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您不需要迭代控制器中的服务。只需这样做:

ListTile(
          leading: Row(
            mainAxisSize: MainAxisSize.min,
            children: [
              Icon(Icons.add_shopping_cart),
              VerticalDivider(),
            ],
          ),
          title: Text("QUICK REFERENCE"),
        ),

这将首先清理数据透视表,然后立即附加所有新值。

我真的鼓励您不要在未验证$ request值的情况下使用它们。在这种情况下,请先运行此程序,然后再开始同步数据透视表:

$user = Auth::user();
$user->services()->sync($request->services);