我正在尝试将数据从表单存储到数据透视表asset_user。
模型用户:
public function assets()
{
return $this->belongsToMany(Asset::class)->withPivot(['amount']);
}
模型资产
public function users()
{
return $this->belongsToMany(User::class)->withPivot(['amount']);
}
迁移资产_用户:
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();
});
}
我的 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>
控制器:
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']
]);
通过上面的尝试,我得到了错误:
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)
为什么它尝试将所有 3 个值存储到所有 3 列?谢谢!
您可以使用同步方法而不是像这样附加:
$user->assets()->sync($request->asset_id[], ['amount'=> $request->amount]);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句