Laravel 定义了belongsToMany 关系而不提供第二个参数

时间:2021-05-03 07:31:02

标签: laravel laravel-8

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();

2 个答案:

答案 0 :(得分:2)

在您的用户模型中: 改变

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

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

答案 1 :(得分:2)

应该是复数。 walletsusers

用户模型:

public function wallets(): BelongsToMany  //not wallet
{
    return $this->belongsToMany(Wallet::class);
}

钱包模型:

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