具有 laravel 关系的错误 sql 查询
wrong sql queries with laravel relation
这是我的 tables
Schema::create('badge_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
$table->foreignId('badge_id')->references('id')->on('badges')->onUpdate('cascade')->onDelete('cascade');
$table->timestamps();
$table->softDeletes();
});
Schema::create('badges', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->string('image')->nullable();
$table->integer('condition');
$table->timestamps();
$table->softDeletes();
});
这是关系
在 BagdeUser 模态
public function badge()
{
return $this->hasMany(Badge::class);
}
在徽章模式中
public function badgeUser()
{
return $this->belongsTo(BadgeUser::class , 'badge_id');
}
在我的资源中
我已经从 badge_user table 中获取所有数据并将其传递到资源中
public function toArray($request)
{
return [
'badges' => new BadgeResource($this->badge),
];
}
BadeResource
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'description' => $this->description,
'image' => new MediaResource($this->getMedia('badge')->first()),
'condition' => $this->condition,
];
在获取数据时得到了这个
Column not found: 1054 Unknown column 'badges.badge_user_id' in 'where clause' (SQL: select * from `badges` where `badges`.`badge_user_id` = 1 and `badges`.`badge_user_id` is not null and `badges`.`deleted_at` is null)
现在我希望徽章与用户相关联
问题是,在您的 badge_user 迁移中,您创建了外键 badge_id,这意味着存在关系 Badge User N:1 Badge
但是在您的模型中,您指定 BadgeUser 有很多徽章并且 Badge 属于 BadgeUser(即 Badge User 1:N Badge)
这就是为什么 laravel 在查询中寻找 badge_user_id 的原因,因为您以相反的方式定义了关系。
你仍然可能在做 M:N 你不需要手动做的关系。
你应该使用这样的东西(来自 Laravel 文档)
return $this->belongsToMany(Role::class);
这是我的 tables
Schema::create('badge_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
$table->foreignId('badge_id')->references('id')->on('badges')->onUpdate('cascade')->onDelete('cascade');
$table->timestamps();
$table->softDeletes();
});
Schema::create('badges', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->string('image')->nullable();
$table->integer('condition');
$table->timestamps();
$table->softDeletes();
});
这是关系 在 BagdeUser 模态
public function badge()
{
return $this->hasMany(Badge::class);
}
在徽章模式中
public function badgeUser()
{
return $this->belongsTo(BadgeUser::class , 'badge_id');
}
在我的资源中
我已经从 badge_user table 中获取所有数据并将其传递到资源中
public function toArray($request)
{
return [
'badges' => new BadgeResource($this->badge),
];
}
BadeResource
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'description' => $this->description,
'image' => new MediaResource($this->getMedia('badge')->first()),
'condition' => $this->condition,
];
在获取数据时得到了这个
Column not found: 1054 Unknown column 'badges.badge_user_id' in 'where clause' (SQL: select * from `badges` where `badges`.`badge_user_id` = 1 and `badges`.`badge_user_id` is not null and `badges`.`deleted_at` is null)
现在我希望徽章与用户相关联
问题是,在您的 badge_user 迁移中,您创建了外键 badge_id,这意味着存在关系 Badge User N:1 Badge
但是在您的模型中,您指定 BadgeUser 有很多徽章并且 Badge 属于 BadgeUser(即 Badge User 1:N Badge)
这就是为什么 laravel 在查询中寻找 badge_user_id 的原因,因为您以相反的方式定义了关系。
你仍然可能在做 M:N 你不需要手动做的关系。
你应该使用这样的东西(来自 Laravel 文档)
return $this->belongsToMany(Role::class);