在 laravel
中,我尝试在两个表之间创建一个简单的 relation-ship
作为 users
和 wallets
,而不提供第二个参数,但是当我尝试在它们之间访问时,我得到错误:
未找到基表或视图: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();
答案 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)
应该是复数。 wallets
和 users
用户模型:
public function wallets(): BelongsToMany //not wallet
{
return $this->belongsToMany(Wallet::class);
}
钱包模型:
public function users(): BelongsToMany //not user
{
return $this->belongsToMany(User::class);
}