我添加数据的表单是这样的:
当klik保存时,它将调用控制器
我的控制器是这样的:
public function store(Request $request)
{
$param = $request->only('account_name','account_number','bank_id','branch');
$result = $this->user_service->addUserBank($param);
if($result)
$status='success';
else
$status = 'failed';
return redirect('member/profile/setting/account')->with('status',$status);
}
我的服务是这样的:
public function addUserBank($param)
{
$instance = User::where('id', '=', auth()->user()->id)->first();
$param['user_id'] = auth()->user()->id;
$param['status'] = 0;
$instance->banks()->attach([
'status' => $param['status'],
'account_name' => $param['account_name'],
'account_number' => $param['account_number'],
'branch' => $param['branch']
]);
return $result;
}
我的模特用户是这样的:
<?php
namespace App;
use App\Models\MasterData;
use Collective\Html\Eloquent\FormAccessible;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable, FormAccessible;
protected $fillable = [
'name', 'email', 'password', 'api_token','birth_date','mobile_number','gender','full_name'
];
protected $hidden = [
'password', 'remember_token',
];
public function banks()
{
return $this->belongsToMany(MasterData::class, 'users_banks', 'user_id', 'bank_id') ->withPivot('status','account_name','account_number','branch')->withTimestamps();
}
}
所以我有3个表:users表,users_banks表(数据透视表)和master_datas表
类型为bank
的master_datas表中银行名称的列表用户表包含字段ID,姓名,电子邮件,密码等=&gt;见模型用户
Master_datas表有字段ID(这是银行ID),名称(这是银行名称),类型(存在银行类型,订单状态等等。所以,获取type = bank)
Users_banks表包含字段ID,user_id,bank_id,status,account_name,account_number,branch
运行时,它无法成功插入数据透视表(表users_banks)。
看起来我的方式插入数据透视表,不是真的。
你能帮助我吗?
其他
表Master_datas是这样的:
答案 0 :(得分:2)
问题是您没有在bank_id
方法中传递addUserBank()
。你可以这样做:
public function addUserBank($param)
{
$param['status'] = 0;
auth()->user()
->banks()
->attach($param['bank_id'], array_only($param, ['status', 'account_name', 'account_number', 'branch']);
return true;
}
注意:您不需要在此明确设置user_id
,因为Laravel会自动为您执行此操作。
答案 1 :(得分:1)
创建UserBank
模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserBank extends model
{
protected $table = 'user_banks';
protected $fillable = ['user_id','bank_id'];
}
然后从控制器填充表格:
public function store(Request $request)
{
$param = $request->only('account_name','account_number','bank_id','branch');
$result = $this->user_service->addUserBank($param);
if($result)
{
$pivot=new UserBank();
$pivot->user_id=auth()->user()->id;
$pivot->bank_id=$request->bank_id;
if($pivot->save())
{
$status='success';
}
}
else
{
$status = 'failed';
}
return redirect('member/profile/setting/account')->with('status',$status);
}