Laravel 4 - 数据表 - 调用数组上的成员函数 getQuery()
Laravel 4 - Datatables - Call to a member function getQuery() on array
以下查询 MySQL 在 MySQL MyAdmin 中正常工作。
SELECT contacts.id, contacts.gsm, contacts.name, contacts.last_name, contacts.email, contacts.created_at, if(temp.Count >= 1,temp.Count,0) as newCount
FROM contacts
LEFT JOIN
(SELECT contacts.id, COUNT(groupcontact.id) AS Count
FROM contacts
LEFT JOIN groupcontact ON groupcontact.contacts_id = contacts.id
LEFT JOIN groups ON groups.id = groupcontact.groups_id
WHERE groups.id = :idGrupo
GROUP BY contacts.id)
temp ON temp.id = contacts.id
但是当我尝试 运行 与 LARAVEL + RAW DB 中的数据表时,returns 这个错误-
{"error":{"type":"Symfony\Component\Debug\Exception\FatalErrorException","message":"Call to a member function getQuery() on array","file":"C:\xampp\htdocs\mcdigital\laravel\vendor\bllim\datatables\src\Bllim\Datatables\Datatables.php","line": 256}}
我不知道为什么
LARAVEL 控制器
$sql="SELECT contacts.id, contacts.gsm, contacts.name, contacts.last_name, contacts.email, contacts.created_at, if(temp.Count >= 1,temp.Count,0) as newCount
FROM contacts
LEFT JOIN
(SELECT contacts.id, COUNT(groupcontact.id) AS Count
FROM contacts
LEFT JOIN groupcontact ON groupcontact.contacts_id = contacts.id
LEFT JOIN groups ON groups.id = groupcontact.groups_id
WHERE groups.id = :idGrupo
GROUP BY contacts.id)
temp ON temp.id = contacts.id";
$usuarios = DB::select( DB::raw($sql), array('idGrupo' => $idGrupo));
return Datatables::of($usuarios)
->add_column('options', '
<label class="toggle yesNoGroup pull-left">
<input type="checkbox" name="checkbox-toggle" id="yesNoGroupchk-{{ $id }}" @if(newCount >0)checked@endif>
<i></i></label>
')->make();
JS 数据表
if ($(tablaName).length && !isNaN(idGroup)) {
var $oTable = $(tablaName).dataTable({
"bServerSide": true,
"sAjaxSource": '/contact-list-group-load/'+idGroup,
"autoWidth": true,
"oLanguage": {
"sProcessing": '<image src="/images/ajax-loader.gif" alt="Cargando...">',
"sLengthMenu": "Mostrar _MENU_ contactos",
"sSearch": "Buscar:",
"sZeroRecords": "No se encontraron resultados",
"sInfo": "Mostrando _START_ al _END_ de un total de _TOTAL_ contactos",
"oPaginate": {
"sFirst": "Primero",
"sLast": "Último",
"sNext": "Siguiente",
"sPrevious": "Anterior"
}
},
"aaSorting": [[0, 'desc']],
"sDom":
"<'row'<'col-xs-6'l><'col-xs-6'f>r>"+
"t"+
"<'row'<'col-xs-12 text-center tableCuantosRegistros'i><'col-xs-12 text-center'p>>",
"sLoadingRecords": '<image src="/images/ajax-loader.gif" alt="Cargando...">',
"aoColumnDefs": [
{ "bSearchable": false, "aTargets": [ 5, 6 ] },
{ "bSortable": false, "aTargets": [ 5, 6 ] }
],
"fnDrawCallback": function (oSettings) {
},
"iDisplayLength": 100
});
也许,只是想问一下如何将此 mysql 查询转换为 Laravel Eloquent 或 Laravel 查询生成器。请指教。
提前致谢
你的错误说明了一切。
您应该将 $usuarios array 转换为 Collection 为:
$usuarios = DB::select( DB::raw($sql), array('idGrupo' => $idGrupo));
$usuarios= collect($usuarios);
继续……
以下查询 MySQL 在 MySQL MyAdmin 中正常工作。
SELECT contacts.id, contacts.gsm, contacts.name, contacts.last_name, contacts.email, contacts.created_at, if(temp.Count >= 1,temp.Count,0) as newCount
FROM contacts
LEFT JOIN
(SELECT contacts.id, COUNT(groupcontact.id) AS Count
FROM contacts
LEFT JOIN groupcontact ON groupcontact.contacts_id = contacts.id
LEFT JOIN groups ON groups.id = groupcontact.groups_id
WHERE groups.id = :idGrupo
GROUP BY contacts.id)
temp ON temp.id = contacts.id
但是当我尝试 运行 与 LARAVEL + RAW DB 中的数据表时,returns 这个错误- {"error":{"type":"Symfony\Component\Debug\Exception\FatalErrorException","message":"Call to a member function getQuery() on array","file":"C:\xampp\htdocs\mcdigital\laravel\vendor\bllim\datatables\src\Bllim\Datatables\Datatables.php","line": 256}}
我不知道为什么
LARAVEL 控制器
$sql="SELECT contacts.id, contacts.gsm, contacts.name, contacts.last_name, contacts.email, contacts.created_at, if(temp.Count >= 1,temp.Count,0) as newCount
FROM contacts
LEFT JOIN
(SELECT contacts.id, COUNT(groupcontact.id) AS Count
FROM contacts
LEFT JOIN groupcontact ON groupcontact.contacts_id = contacts.id
LEFT JOIN groups ON groups.id = groupcontact.groups_id
WHERE groups.id = :idGrupo
GROUP BY contacts.id)
temp ON temp.id = contacts.id";
$usuarios = DB::select( DB::raw($sql), array('idGrupo' => $idGrupo));
return Datatables::of($usuarios)
->add_column('options', '
<label class="toggle yesNoGroup pull-left">
<input type="checkbox" name="checkbox-toggle" id="yesNoGroupchk-{{ $id }}" @if(newCount >0)checked@endif>
<i></i></label>
')->make();
JS 数据表
if ($(tablaName).length && !isNaN(idGroup)) {
var $oTable = $(tablaName).dataTable({
"bServerSide": true,
"sAjaxSource": '/contact-list-group-load/'+idGroup,
"autoWidth": true,
"oLanguage": {
"sProcessing": '<image src="/images/ajax-loader.gif" alt="Cargando...">',
"sLengthMenu": "Mostrar _MENU_ contactos",
"sSearch": "Buscar:",
"sZeroRecords": "No se encontraron resultados",
"sInfo": "Mostrando _START_ al _END_ de un total de _TOTAL_ contactos",
"oPaginate": {
"sFirst": "Primero",
"sLast": "Último",
"sNext": "Siguiente",
"sPrevious": "Anterior"
}
},
"aaSorting": [[0, 'desc']],
"sDom":
"<'row'<'col-xs-6'l><'col-xs-6'f>r>"+
"t"+
"<'row'<'col-xs-12 text-center tableCuantosRegistros'i><'col-xs-12 text-center'p>>",
"sLoadingRecords": '<image src="/images/ajax-loader.gif" alt="Cargando...">',
"aoColumnDefs": [
{ "bSearchable": false, "aTargets": [ 5, 6 ] },
{ "bSortable": false, "aTargets": [ 5, 6 ] }
],
"fnDrawCallback": function (oSettings) {
},
"iDisplayLength": 100
});
也许,只是想问一下如何将此 mysql 查询转换为 Laravel Eloquent 或 Laravel 查询生成器。请指教。
提前致谢
你的错误说明了一切。
您应该将 $usuarios array 转换为 Collection 为:
$usuarios = DB::select( DB::raw($sql), array('idGrupo' => $idGrupo));
$usuarios= collect($usuarios);
继续……