如何在多对多关系的情况下插入数据透视表?(Laravel 5.3)

mos*_*toh 2 php mysql pivot-table laravel laravel-5.3

我添加数据的表格是这样的:

在此处输入图片说明

当点击保存时,它会调用控制器

我的控制器是这样的:

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);
}
Run Code Online (Sandbox Code Playgroud)

我的服务是这样的:

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;
}
Run Code Online (Sandbox Code Playgroud)

我的模型用户是这样的:

<?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();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我有 3 个表:users 表、users_banks 表(数据透视表)和 master_datas 表

位于 master_datas 表中类型为 bank 的银行名称列表

用户表具有字段 ID、姓名、电子邮件、密码等 => 查看模型用户

Master_datas表有字段id(这是银行ID),名称(这是银行名称),类型(存在银行类型,订单状态等。所以,得到类型=银行)

Users_banks 表有字段 id、user_id、bank_id、status、account_name、account_number、branch

运行时,它没有成功插入到数据透视表(表 users_banks)中。

看起来像我插入数据透视表的方式,不是真的。

你能帮助我吗?

额外的

表 Master_datas 是这样的:

在此处输入图片说明

Ami*_*pta 5

问题是你没有传入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;
}
Run Code Online (Sandbox Code Playgroud)

注意:您无需在user_id此处明确设置,因为 Laravel 会自动为您设置。

文档