[英]How to store $request from form to Pivot table in laravel
I am trying to store data from a form to a pivot table asset_user.我正在尝试将数据从表单存储到数据透视表asset_user。
Model User:模型用户:
public function assets()
{
return $this->belongsToMany(Asset::class)->withPivot(['amount']);
}
Model Asset模型资产
public function users()
{
return $this->belongsToMany(User::class)->withPivot(['amount']);
}
Migration asset_user:迁移资产_用户:
public function up()
{
Schema::create('asset_user', function (Blueprint $table) {
$table->foreignId('asset_id')->unsigned()->index();
$table->foreignId('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('asset_id')->references('id')->on('assets');
$table->primary(['user_id', 'asset_id']);
$table->decimal('amount');
$table->timestamps();
});
}
My POST form:我的 POST 表单:
<div id="form" class="form">
<form action="{{ route('home.store') }}" method="POST" novalidate>
@csrf
<label for="asset_id">Add Asset</label>
<select class="form-control" id="asset_id" name="asset_id">
@foreach($assets as $asset)
<option value="{{$asset->id}}">{{$asset->symbol}} {{$asset->name}}</option>
@endforeach
</select>
</div>
@error('asset_id')
<div style="color:red;">{{ $message }}</div>
@enderror
</div>
<div class="form-group mb-4">
<label for="amount">Amount</label>
<input type="number" class="form-control" id="amount" name="amount" value=''></input>
@error('amount')
<div style="color:red;">{{ $message }}</div>
@enderror
</div>
<input type="hidden" name="user_id" value="{{ Auth::user()->id }}">
<button type="submit" class="btn btn-dark">speichern</button>
</form>
</div>
Controller:控制器:
public function store(Request $request){
$validAsset= $this->validate($request,[
'amount' => 'required|numeric',
'asset_id' => 'required',
'user_id' => 'required'
]);
// dd($validAsset);
$user = User::findOrFail(1);
$user->assets()->attach($validAsset, [
'amount'=> $validAsset['amount'],
'asset_id'=> $validAsset['asset_id'],
'user_id' => $validAsset['user_id']
]);
With my try above i get the error:通过上面的尝试,我得到了错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '5-3' for key 'PRIMARY SQLSTATE [23000]:违反完整性约束:1062 键 'PRIMARY 的重复条目 '5-3'
insert into `asset_user` (`amount`, `asset_id`, `user_id`) values (7, 3, 5), (7, 3, 5), (7, 3, 5)
Why does it try to store all 3 values to all 3 columns?为什么它尝试将所有 3 个值存储到所有 3 列? Thanks!谢谢!
您可以使用同步方法而不是像这样附加:
$user->assets()->sync($request->asset_id[], ['amount'=> $request->amount]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.