雄辩选择视图

时间:2017-05-10 19:26:42

标签: eloquent

我正在尝试在视图中进行选择

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();

调用视图的正确方法是什么?

1 个答案:

答案 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(以及其他地方)更详细地描述了这种方法。