You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel插入数据提示SQLSTATE[42S02]表tienda.productos不存在如何解决

问题根本原因

Laravel Eloquent模型默认会自动匹配模型类名的小写复数形式作为对应数据表名。你的模型类名为Producto,默认会查找productos表,但你迁移文件里创建的是producto(单数)表,所以触发表不存在的报错。这个问题和$rules校验规则属性完全无关,你不需要修改$rules的代码即可解决问题。

解决方案(二选一即可,无需修改$rules属性)

方案1:修改迁移文件,创建正确的表名(推荐)

  • 如果你还未写入业务数据,直接修改迁移文件里的表名,重新执行迁移即可
  • 修改迁移文件中Schema::create的第一个参数为复数productos:
// 迁移文件修改后核心代码
public function up()
{
    Schema::create('productos', function (Blueprint $table) { // 此处将原单数producto改为复数productos
        $table->id();
        $table->string('nombre');
        $table->string('Describcion');
        $table->text('Clasificación');
        $table->timestamps();
    });
}
  • 执行命令回滚并重新运行迁移:php artisan migrate:fresh

注意:migrate:fresh会清空所有现有表和数据,仅适用于开发初期无业务数据的场景

方案2:在模型中手动指定对应表名(无需修改表结构)

  • 如果你已经有业务数据存在producto表里、不想修改表结构,直接在Producto模型里加$table属性手动指定表名即可:
// Producto.php模型修改后核心代码
class Producto extends Model
{
    use HasFactory;

    protected $table = 'producto'; // 新增这一行,手动指定对应单数表名
    static $rules = [
        'nombre' => 'required',
        'Describcion' => 'required',
        'Clasificación' => 'required',
    ];

    // 此处修正原拼写错误:filliable → fillable,否则create方法会过滤字段无法写入
    protected $fillable = ['nombre', 'Describcion', 'Clasificación'];
}

其他注意事项

  • 原模型代码里批量赋值属性名拼写错误:$filliable多写了一个l,正确拼写为$fillable,如果不修正,就算表名问题解决,也会出现字段无法写入的报错。
  • 控制器store方法里有两段重复的return代码,第二段return redirect()->route('productos.index2')永远不会执行,可以直接删除。

内容的提问来源于stack exchange,提问作者IVAN DANIEL BARON CARVAJAL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 04:18:02