Php 一般错误:合并两个查询时出现2031(laravel datatables)
这些是构成要推送到laravel datatables builder的集合的查询:Php 一般错误:合并两个查询时出现2031(laravel datatables),php,sql,laravel,datatables,Php,Sql,Laravel,Datatables,这些是构成要推送到laravel datatables builder的集合的查询: foreach (Session::get('trienios') as $trienio) { $oeTrienios = $oeTrienios->where('data_trienio', $trienio->trienio)->whereHas('curso', function ($query) use ($trienio) { $query->wher
foreach (Session::get('trienios') as $trienio) {
$oeTrienios = $oeTrienios->where('data_trienio', $trienio->trienio)->whereHas('curso', function ($query) use ($trienio) {
$query->where('curso', $trienio->curso);
});
}
$union = Trienio::with('curso')->whereHas('curso', function ($query) use ($coordinatedCourse) {
$query->where('curso', $coordinatedCourse);
})->union($oeTrienios);
$trienios = \DB::table(\DB::raw("({$union->toSql()}) as x"))->select(['data_trienio']);
官方的laravel datatables网站上有一个教程“解释”了如何使用united queries,但是它非常模糊,无法实际解释任何内容。此外,当我试图在教程中添加他们的代码时:
$trienios = \DB::table(\DB::raw("({$union->toSql()}) as x"))
它给了我以下错误:
SQLSTATE[HY000]: General error: 2031 (SQL: select count(*) as aggregate from (select `data_trienio` from ((select * from `trienios` where exists (select * from `cursos` where `trienios`.`curso_id` = `cursos`.`id` and `curso` = ?)) union (select * from `trienios` where `data_trienio` = ? and exists (select * from `cursos` where `trienios`.`curso_id` = `cursos`.`id` and `curso` = ?) and `data_trienio` = ? and exists (select * from `cursos` where `trienios`.`curso_id` = `cursos`.`id` and `curso` = ?))) as x) count_row_table)
但是,如果我将参数->get()
附加到->union($oeTrienios)
,它将正常工作,但是,集合将在数据表上无法排序
我如何解决这个问题?欢迎任何帮助
附-链接到演示:子查询
$union->toSql()
只有没有参数的sql代码,您需要调用绑定。请参阅,代码为:
$trienios = \DB::table(\DB::raw("({$union->toSql()}) as x"))
->select(['data_trienio'])
->mergeBindings($union);
你能提到联合查询教程的链接吗?添加到帖子中。抛出此错误:传递给Illumb\Database\Query\Builder::mergeBindings()的参数1必须是Illumb\Database\Query\Builder的实例,Illumb\Database\Eloquent\Builder的实例。我认为$union
应该是$union->getQuery()
。不管怎样,这个救了我的命。