laravel - Laravel 定义 belongsToMany 关系而不提供第二个参数
问题描述
在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();
解决方案
在您的用户模型中:更改
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)
推荐阅读
- azure - 无法从 Azure Active Directory 中删除受邀用户
- python - Python:按两个标准而不是一个标准对列表列表进行排序
- java - Lottie 动画返回此错误:Lottie 不支持 3D 图层
- sql - 在 Oracle 数据库中插入、删除、更新返回旧值和新值的触发器
- mysql - 1045 - 导入 csv 文件时拒绝用户访问
- python - 有没有办法只用一个 join() 方法使这行代码更简单?
- python - 如何通过另一个模型的 id 过滤模型字段中的某些项目?
- flutter - 收到 Flutter Push Notifications 但没有通知
- angular - Angular 11 – [HMR] 更新失败:NullInjectorError:无 ApplicationRef 提供者
- c# - Mongodb C# - 如何获取最大日期 - (聚合)