当前位置: 首页 > 知识库问答 >
问题:

Laravel错误SQLSTATE[42S22]:未找到列:1054字段列表中的未知列categoria_id

范翰飞
2023-03-14

我试图在“Categoria”表和“Noticia”表之间创建一个多对多关系,然后使用工厂生成数据,但我得到了那个错误。我已经创建了一个透视表,但我不知道出了什么问题,我对这个很陌生。。。。

Noticia模型:

名称空间应用程序;

使用Illumb\Database\Elount\Model;

类Noticia扩展模型{

public function categorias(){ 
    return $this->belongsTo(Categoria::class); 
}
public function autores(){ 
    return $this->belongsTo(Autor::class); 
}

}

类别模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Categoria extends Model
{
    public function noticia()
    {
        return $this->belongsToMany(Noticia::class);
    }

}

支点迁移:

class CreateCategoriaNoticiaTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categoria_noticia', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('noticia_id');
        $table->foreign('noticia_id')->references('id')->on('noticias');
        $table->unsignedBigInteger('categoria_id');
        $table->foreign('categoria_id')->references('id')->on('categorias');
        $table->timestamps();
        });
    }

诺西西亚移民

class CreateNoticiasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('autors', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('nombre');
            $table->timestamps();
        });

        Schema::create('noticias', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->date('fecha');
            $table->string('titulo');
            $table->text('contenido');
            $table->string('image');
            $table->unsignedBigInteger('autor_id');
            $table->foreign('autor_id')->references('id')->on('autors');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('noticias');
        Schema::dropIfExists('autors');
        Schema::dropIfExists('categorias');

    }
}

类别迁移:

lass CreateCategoriasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categorias', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('nombre');
            $table->timestamps();
        });
    }

Noticia工厂:

$factory->define(Noticia::class, function (Faker $faker) {
    return [

        'autor_id' => factory(\App\Autor::class),
        'categoria_id'=> factory(\App\Categoria::class),
        'titulo' => $faker->sentence(4),
        'image' => $faker->randomElement(['img1.jpg', 'img2.jpg', 'img3.jpg', 'img4.jpg']),
        'contenido' => $faker->paragraph,
        'fecha'=> $faker->date,
    ];
});

分类因素包括:

$factory->define(Categoria::class, function (Faker $faker) {
    return [
        'nombre'=> $faker->name

    ];
});

和种子通知:公共功能运行(){

    factory(Noticia::class, 100)->create();

}

}

我发现了这个错误:SQLSTATE[42S22]:未找到列:“字段列表”中的1054未知列“categoria\u id”(SQL:insert-intocategoriascategoria\u idupdated\u atcreated\u at)值(Ciencia,2020-06-11 22:22:382020-06-11 22:38))

提前感谢!!!

共有2个答案

秦斌
2023-03-14

类别迁移没有定义名为categoria_id的字段,它只是id

祝高超
2023-03-14

有几件事,首先,正如你所说,“Categoria”和“Noticia”是多对多的,所以双方都应该属于同一类。

因此,对于您的Noticia型号:

public function categorias(){ 
    return $this->belongsToMany(Categoria::class); 
}

错误是告诉你,你没有'categoria_id'在你的Notisia表,这是真的。

所以你需要做的就是这样。

从迁移中删除此行。

php prettyprint-override">'categoria_id'=> factory(\App\Categoria::class),

然后

factory(App\Noticia::class, 100)->create()->each(function($n) {
  $n->categorias()->save(factory(App\Categoria::class)->make());
});

这应该行得通。

 类似资料:
  • 我使用的框架Laravel。 我有两个表(用户和成员)。当我想登录时,我会收到错误消息: SQLSTATE[42S22]:找不到列: 1054未知的列'user_email'in'where子句'(SQL:选择*fromwhere=?限制1)(绑定:数组(0= 表用户 表成员 迁移用户 移民成员 模型用户 模范会员 成员模型使用:使用照明\Auth\UserInterface; 控制器 auth.

  • 问题内容: 我正在使用Laravel框架。 我有2个表(用户和成员)。当我想登录时,收到错误消息: SQLSTATE [42S22]:找不到列:1054’where子句’中的未知列’user_email’(SQL:select * from where =?limit 1)(绑定:数组(0 =>'test@hotmail.com‘,)) 表用户 表成员 迁移用户 移民会员 模型使用者 模范会员 成

  • 我是编程界的新手,我自己在学习laravel,我发现了这个错误:SQLSTATE[42S22]:Column not found:1054未知列'clientes.clientes\u id'在'where子句中(SQL:select*fromwhere=1和不为空)(视图:/shared/httpd/laravel_8_crud/resources/views/pedidos/index.bla

  • 我正在尝试使用PDO向MySQL插入一条记录,下面的代码中可以看到我的sql语句。 当执行此代码时,我会遇到以下错误消息; SQLState[42S22]:找不到列:1054“Field List”中的未知列“John” 这无疑是解决这个问题的一个简单方法,但我似乎看不出来,有人能给我指明正确的方向吗?

  • 我正在制作一个我想登录和注册的应用程序,并且能够将csv文件导入数据库,注册和登录工作正常,但是当我想导入csv时,我遇到了这个问题: 错误luminate\Database\QueryException SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“classe”(SQL:select*fromwhere(=7和=7598)限制1)科目表 账户控制员

  • 此函数有问题。它应该返回使用下面的sql调用收集的数据的json字符串。问题是,当通过服务器访问页面时(例如-localhost/app/API/states/Alabama/1/10.json),我得到一个错误代码“500”。奇怪的是,数据在使用.json和不使用appending.json的情况下按预期显示。据我所知,控制器和模型设置得很好,但错误代码仍然存在: {“code”:500,“ur