繁体   English   中英

如何将新列数据保存到 laravel pivot 表中?

[英]How can I save a new column data into laravel pivot table?

我有这个 3 表:

站(id,station_name)
产品(id,product_name)

pivot表

product_station (station_id,product_id, tank_volum)

在此处输入图像描述

车站 Model

public function products(){
        return $this->belongsToMany(Product::class)
            ->withTimestamps()
            ->withPivot('tank_volume');
    }

产品 Model

  public function stations(){
        
   return $this->belongsToMany(Station::class);
    }

我正在尝试创建一个包含许多产品的站点,并且每个产品都有其罐容量,但我无法将罐容量值保存到数据库中:

product_station 表

在此处输入图像描述

这是我的 controller:

public function store(StationsRequest $request)
    {

//        dd($request);

        $input = $request->all();

        if($file = $request->file('photo_id')) {

            $name = time() . $file->getClientOriginalName();

            $file->move('images', $name);

            $photo = Photo::create(['file'=>$name]);

            $input['photo_id'] = $photo->id;

        }

       $station = Station::create($input);

       $station->products()->sync($request->products , false);

        return redirect('/admin/stations');
    }

在此处输入图像描述

问:如何在 product_station 表“数据透视表”中保存 Tank 容积?

如果你想sync()相关的额外字段:

$product_ids = [];
foreach ($station->products as $product) {
    //collect all inserted record IDs
    $product_ids[$product->id] = ['tank_volume' => 'tank_volume_value'];  
}
//if you want to pass new id from new query
//$product_ids['new_created_product->id'] = ['tank_volume' => 'tank_volume_value'];

然后

$station->products()->sync($product_ids);

在这种情况下,最好使用 attach():

$station = Station::create(['fields']);
$station->products()->attach([$product->id => ['tank_volume'=>'value']]);

暂无
暂无

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

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