首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel错误:完整性约束违反: where子句中的1052列'id‘不明确

Laravel错误:完整性约束违反: where子句中的1052列'id‘不明确
EN

Stack Overflow用户
提问于 2022-08-17 21:36:41
回答 1查看 178关注 0票数 1

在我的laravel应用程序中,我发现了下面的错误,我认为这是因为这种关系形成的不正确?

代码语言:javascript
代码运行次数:0
运行
复制
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select * from `badges` where exists (select * from `users` inner join `user_badge` on `users`.`id` = `user_badge`.`user_id` where `badges`.`id` = `user_badge`.`badge_id` and `id` = 1) and `badgecategory_id` = 4 limit 1)\

方法触发错误。

代码语言:javascript
代码运行次数:0
运行
复制
public function syncBadges(Request $request)
    {

        $user = User::with('badges')->findOrFail($request['user_id']);

        $badge = Badge::whereHas('users', function ($query) use ($request){
            $query->where('id' , $request['user_id']);
        })
        ->where('badgecategory_id',$request['badgecategory_id'])
        ->first();

        if($badge)
        {
            $user->badges()->dettach($badge['id']);
            $user->badges()->attach($request['badge_id']);
        }
        else
        {
            $user->badges()->attach($request['badge_id']);
        }
}

用户模型:

代码语言:javascript
代码运行次数:0
运行
复制
public function badges()
    {
        return $this->belongsToMany('App\Models\Badge', 'user_badge', 'user_id', 'badge_id');
    }

徽章模型:

代码语言:javascript
代码运行次数:0
运行
复制
protected $table = 'badges';

public function users()
    {
        return $this->belongsToMany('App\Models\User', 'user_badge', 'badge_id', 'user_id');
    }

    public function category()
    {
        return $this->belongsTo('App\Models\BadgeCategory', 'badgecategory_id');
    }

Bage表偏移

代码语言:javascript
代码运行次数:0
运行
复制
public function up()
    {


        Schema::create('badges', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('badgecategory_id')->index();
            $table->foreign('badgecategory_id')->references('id')->on('badgecategories')->onDelete('cascade')->onUpdate('cascade');
            $table->string('title');
            $table->string('icon')->nullable();
            $table->timestamps();
        });


    }

用户徽章数据透视表迁移

代码语言:javascript
代码运行次数:0
运行
复制
class CreateUserBadgeTable extends Migration
{
    public function up()
    {


        Schema::create('user_badge', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id')->index()->nullable();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
            $table->unsignedInteger('badge_id')->nullable()->index();
            $table->foreign('badge_id')->references('id')->on('badges')->onDelete('cascade')->onUpdate('cascade');
            $table->timestamps();
        });


    }

    
    public function down()
    {
        DB::statement('SET FOREIGN_KEY_CHECKS = 0');
        Schema::dropIfExists('user_badge');
        DB::statement('SET FOREIGN_KEY_CHECKS = 1');
    }
}
EN

Stack Overflow用户

发布于 2022-08-17 22:10:36

在您的徽章查询中,您需要指定表,因为您使用的是whereHas

代码语言:javascript
代码运行次数:0
运行
复制
$badge = Badge::whereHas('users', function ($query) use ($request){
        $query->where('users.id' , $request['user_id']);
    })
    ->where('badgecategory_id',$request['badgecategory_id'])
    ->first();
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73395169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档