【问题标题】:Getting Error in simple delete query in MySql在 MySql 中的简单删除查询中出现错误
【发布时间】:2021-02-24 13:17:04
【问题描述】:

当我尝试使用以下查询从表中删除记录时,我遇到了非常奇怪的问题:

delete from `user_join_groups` where `group_id` = 1 and `user_id` = 217;  

下面是Mysql抛出的错误:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.user_id' doesn't exist (SQL: delete from `user_join_groups` where `group_id` = 1 and `user_id` = 217)  
//"Test" is my database name  

我正在为我的项目使用 Laravel 框架,我在上面运行查询。以下是生成上述 mysql 删除查询的 laravel 代码:

\Illuminate\Support\Facades\DB::table('user_join_groups')
     ->where('group_id', $group_id)
     ->where('user_id', $this->user->id)->delete();  

我还附上了 laravel 抛出的错误截图。在屏幕截图中,laravel 还显示了与迁移相关的内容,但我不知道为什么会这样。

除了 Laravel,我还尝试从 PHPMYADMIN 中删除相同的记录,在这里我得到了相同的错误。

谁能告诉我上面的查询有什么问题以及为什么会出现这个错误?

提前致谢

【问题讨论】:

  • Eloquent 不是这样工作的。要删除关系,您必须使用专用方法,而不是查询构建器
  • "Test" 不能是您的数据库名称,因为从上面的错误消息中,它说“表 'test.user_id' 不存在,所以它必须是一个表。找出你的数据库名称是,并确保您首先发出使用数据库的命令(“use ”)。另外,您的数据库中是否有两个表“user_join_groups”和“test”?还可以尝试为数据库名称和表添加前缀为您的字段命名,例如从 "db.test.user_join_groups" 中删除,其中 "db.test.group_id" = 1 和 "db.test.user_id" = 217;
  • 从名字user_join_groups 听起来就像一个数据透视表。在 Laravel 中,您通常不会手动从数据透视表中删除记录,而是删除关系。 Laravel 可能正在尝试删除相应的用户和组记录但搞砸了。
  • @Ezan​​i 我的数据库未命名为“测试”。我们有真实的数据库名称,但由于隐私问题,我已将实际数据库名称替换为“test”。我正在使用 laravel 删除记录。因此,laravel 会自动使用数据库名称并自动为其添加表名前缀。请检查我的截图
  • 你有几个表之间有外键约束。当您手动添加/删除记录时,数据库通过确保这些相关记录存在或被删除来强制执行完整性。正如已经多次指出的那样,Laravel 为您管理数据透视表,您不应该手动从中删除记录。检查文档以了解 many to many 关系、attaching/detaching

标签: mysql laravel


【解决方案1】:

也许您的表格不存在。确保您为表格创建了具有正确条目的模型,然后运行“php artisan migrate”。 n

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2014-03-01
    • 2019-04-09
    相关资源
    最近更新 更多