簡體   English   中英

在多對多關系的情況下如何插入數據透視表? (Laravel 5.3)

[英]How to insert pivot table in case of many to many relation? (Laravel 5.3)

我添加數據的表單是這樣的:

在此處輸入圖片說明

當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表

位於master_datas表中類型為bank的存儲庫的名稱列表

用戶表具有字段ID,名稱,電子郵件,密碼等=>參見模型用戶

Master_datas表具有字段ID(這是銀行ID),名稱(這是銀行名稱),類型(存在銀行的類型,訂單狀態等。因此,獲得type = bank)

Users_banks表具有字段id,user_id,bank_id,狀態,account_name,account_number,分支

運行時,它不會成功插入數據透視表(表users_banks)。

看來我插入樞紐分析表的方式不正確。

你能幫助我嗎?

額外

表Master_datas是這樣的:

在此處輸入圖片說明

問題是您沒有在addUserBank()方法中傳遞bank_id 您可以這樣做:

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會自動為您設置。

文件

創建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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM