首页 > 解决方案 > Laravel 定义 belongsToMany 关系而不提供第二个参数

问题描述

laravel我尝试relation-ship在两个表之间做一个简单的userswallets不提供第二个参数,但是当我尝试在它们之间访问时我得到错误:

未找到基表或视图:1146 表“sample.user_wallets”不存在

//user
Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('parent_id')->nullable();
    //...

    $table->softDeletes();

    $table->timestamp('created_at')->useCurrent();
    $table->timestamp('updated_at')->useCurrent();
});

//wallets
Schema::create('wallets', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('wallet_name');
    $table->string('wallet_number');
    $table->timestamps();
});

//user_wallet
Schema::create('user_wallet', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->foreignId('wallet_id')->constrained()->cascadeOnDelete();
    $table->primary(['user_id','wallet_id']);
});

用户型号:

public function wallet(): BelongsToMany
{
    return $this->belongsToMany(UserWallet::class);
}

钱包型号:

public function user(): BelongsToMany
{
    return $this->belongsToMany(User::class);
}

通过下面的代码,我尝试访问用户的钱包:

$this->user_wallets = auth()->user()->with('wallet')->get();

标签: laravellaravel-8

解决方案


在您的用户模型中:更改

public function wallet(): BelongsToMany
{
    return $this->belongsToMany(UserWallet::class);
}

致:这个

   public function wallets(): BelongsToMany
{
    return $this->belongsToMany(Wallet::class,'user_wallet');
}

在您的钱包模型中:

  public function users(): BelongsToMany ///not user
{
    return $this->belongsToMany(User::class);
}

注意:U 不需要 UserWallet 模型,因为它是属于 TOMany 关系 建议:在现实生活中,一个用户有很多钱包,一个钱包只属于一个用户,所以关系是 HasMany(on to Many)


推荐阅读