SQLSTATE [42S22]:找不到列:1054未知列material_tags.material_uuid

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLSTATE [42S22]:找不到列:1054未知列material_tags.material_uuid相关的知识,希望对你有一定的参考价值。

我搜索过遇到此错误的人,但我仍然找不到解决方案。

我一直在收到错误:

“SQLSTATE [42S22]:列未找到:1054未知列'material_tags.material_uuid'在'字段列表'中(SQL:选择tags。*,material_tags.material_uuidpivot_material_uuidmaterial_tags.tag_uuidpivot_tag_uuidtags内部连接material_tagstags上。 uuid = material_tags.tag_uuid其中material_tags.material_uuid在(05a36470-d0a0-11e7-91b4-ff3d7d9f961a)和tags.deleted_at为空)“

如果我必须查看材料05a36470-d0a0-11e7-91b4-ff3d7d9f961a它应该看起来像这个enter image description here

当我尝试运行位于控制器上的代码时:

    public function show(Request $request, $id)
{
    $material   = Material::with('tags')->where(
        'uuid',
        $id
    )->first();

我的材料模型有这个:

    public function tags()
{
    return $this->belongsToMany('AppModelsTag', 'material_tags');

}

所以我有一个Tags表,其中存储了所有标签,还有一个Materials表,其中存储了所有材料。我有Material_tags表来查看Materials有哪些标签。

迁移时我的create_materials_table

    public function up()
{
    Schema::connection('materials')->create('materials', function (Blueprint $table) {
        $table->uuid('uuid')
            ->primary();
        $table->string('title');
        $table->integer('viewing_time')
            ->default(15)
            ->comment('In seconds');
        $table->text('description')
            ->nullable();
        $table->uuid('organization_id')
            ->nullable();

        $table->timestamps();
        $table->softDeletes();
    });
}

我的create_tags_table迁移

    public function up()
{
    Schema::connection('materials')->create('tags', function (Blueprint $table) {
        $table->uuid('uuid')
            ->primary();
        $table->string('name')
            ->unique();

        $table->timestamps();
        $table->softDeletes();
    });
}

和我的create_material_tags_table迁移

public function up()
{
    Schema::connection('materials')->create('material_tags', function (Blueprint $table) {
        $table->uuid('uuid')
            ->primary();
        $table->uuid('material_id');
        $table->uuid('tag_id');

        $table->timestamps();

        $table->foreign('material_id')
            ->references('uuid')
            ->on('materials')
            ->onDelete('cascade');
        $table->foreign('tag_id')
            ->references('uuid')
            ->on('tags')
            ->onDelete('cascade');
    });
}
答案

您必须指定自定义外键:

public function tags()
{
    return $this->belongsToMany('AppModelsTag', 'material_tags', 'material_id', 'tag_id');
}

以上是关于SQLSTATE [42S22]:找不到列:1054未知列material_tags.material_uuid的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42S22]:找不到列:1054 未知列 '0' where 子句

SQLSTATE [42S22]:找不到列:1054 未知列 laravel 5.1

SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'user_id'

Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列

SQLSTATE [42S22]:找不到列:1054 未知列 'role_not' 错误

SQLSTATE [42S22]:找不到列:在 laravel livewire 项目中