模型的 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 多级关系急切加载问题