模型的 Laravel“加载”关系函数在 SQL 中产生“未准备”语句

Posted

技术标签:

【中文标题】模型的 Laravel“加载”关系函数在 SQL 中产生“未准备”语句【英文标题】:Laravel "load" relations function of Model produces "unprepared" statement in SQL 【发布时间】:2021-02-15 00:22:58 【问题描述】:

我在使用 load 函数的 Laravel (v7.28) 模型中遇到问题。 它执行没有参数(“?”)但使用原始值的 SQL 查询。

代替:

SELECT * from relation_table where relation_table.model_id IN (?)

它执行:

SELECT * from relation_table where relation_table.model_id IN (123)

如果我有很多 SQL 查询,它会生成未准备好的 SQL 语句,并且我达到了 SQL 错误的限制: SQLSTATE[42000]: Syntax error or access violation: 1461 Can't create more than max_prepared_stmt_count statements

另外,我检测到 refresh 函数在内部调用了相同的 load 函数,所以这个问题也与这个函数有关。

是否有可能避免或修复它?

【问题讨论】:

【参考方案1】:

你可能需要增加你的mysql服务器中的max_prepared_stmt_count,你应该这样添加到/etc/my.cnf中:

[mysqld]
max_prepared_stmt_count = 50000

【讨论】:

是的,我们已经将它设置为 16382,但我认为这不是最好的方法,因为我们隐藏了问题,而不是解决它。

以上是关于模型的 Laravel“加载”关系函数在 SQL 中产生“未准备”语句的主要内容,如果未能解决你的问题,请参考以下文章

具有预加载关系的 Laravel 模型

Laravel - 渴望加载多态关系的相关模型

尝试从子模型重新访问父模型的 laravel 多级关系急切加载问题

带有嵌套关系的 Laravel 急切加载

使用 Laravel 将两个模型合并到一个分页查询中,并带有急切加载的关系

Laravel 混合获取 Eloquent 急切加载嵌套多个模型