我正在尝试在视图中进行选择
ERRO: SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared (SQL: SELECT vw_pontos.usuario_id, vw_pontos.nome, SUM(vw_pontos.pontos) AS pontos FROM vw_pontos GROUP BY vw_pontos.usuario_id ORDER BY pontos DESC, nome ASC)
$results = DB::table('vw_pontos')
->select([
'vw_pontos.usuario_id',
'vw_pontos.nome',
DB::raw('SUM(vw_pontos.pontos) AS pontos')
])
->groupBy('usuario_id')
->orderBy('pontos', 'desc')
->orderBy('nome', 'asc')
->get();
调用视图的正确方法是什么?
答案 0 :(得分:0)
为了语义,你的问题并不是针对Eloquent的。相反,您提供的示例使用查询生成器。您可能希望相应地调整问题上的标记。
至于问题,我不相信你的代码有任何问题。
快速修复可能是使用PDO::ATTR_EMULATE_PREPARES
(如果您无法修改MySQL配置,这可能是您唯一的选择。)
编辑.env
文件并添加到MySQL配置:
'options' => [
\PDO::ATTR_EMULATE_PREPARES => true
]
更完整的例子:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'options' => [
\PDO::ATTR_EMULATE_PREPARES => true
]
],
在https://laracasts.com/discuss/channels/laravel/general-error-1615-prepared-statement-needs-to-be-re-prepared-selecting-mysql-view/replies/119726(以及其他地方)更详细地描述了这种方法。