The query that works in PhpMyAdmin:
Select sum(D.CargaHoraria) as CargaHorariaTotal, C.NomeCurso, C.CursoId, A.Imagem
from Curso C
inner join Disciplina D on D.CursoId = C.CursoId
inner join Area A on A.AreaId = C.AreaId
GROUP BY C.CursoId
Follow the same code in DB::select
of Laravel and I can not return.
DB::select("
Select sum(D.CargaHoraria) as CargaHorariaTotal, C.NomeCurso, C.CursoId, A.Imagem
from Curso C
inner join Disciplina D on D.CursoId = C.CursoId
inner join Area A on A.AreaId = C.AreaId
GROUP BY C.CursoId
");
The intention and the following, I have Courses that each course has several disciplines, and each discipline has its workload, it is necessary to make the sum of the time loads of the disciplines to obtain the cargaHorariaTotal
of the course.
But I'm not succeeding with Laravel
.
Controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Response;
use App\CursoModel;
use DB;
class CursosController extends Controller
{
public function __construct(CursoModel $objeto)
{
//No Auth
$this->curso = $objeto;
}
public function CursosPosGraduacao()
{
return view('Cursos/CursosPosGraduacao');
}
public function CursosFormacaoPedagogica()
{
return view('Cursos/CursosFormacaoPedagogica');
}
public function CursosSegundaLicenciatura()
{
return view('Cursos/CursosSegundaLicenciatura');
}
public function CursoDetalhe()
{
return view('Cursos/CursoDetalhe');
}
public function retornarTodosOsCursos()
{
$Query = DB::select(DB::raw("
Select sum(D.CargaHoraria) as CargaHorariaTotal, C.NomeCurso, C.CursoId, A.Imagem
from Curso C
inner join Disciplina D on D.CursoId = C.CursoId
inner join Area A on A.AreaId = C.AreaId
GROUP BY C.CursoId
"));
return $Query;
}
}
Route
//Matricule
Route::group(['prefix'=>'api'], function(){
Route::group(['prefix'=>'Curso'],function(){
Route::get('retornarTodosOsCursos',['uses'=>'CursosController@retornarTodosOsCursos']);
});
});
CourseModel
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
use Hash;
use Response;
use DB;
class CursoModel extends Model
{
//
protected $primaryKey = 'CursoId';
protected $fillable = ['CursoId', 'AreaId', 'NomeCurso', 'DescricaoCurso', 'ImagemCurso', 'NumeroDoCurso', 'UsuarioId'];
public $table = 'Curso';
public function GetAllRepositorio()
{
return self::all();
}
public function PostRepositorio()
{
if (Auth::check()) { //verifica se tem usuario logado
$data = new CursoModel();
$data->fill(Input::all());
if (is_null($data)) {
return false;
}
//Confere se CursoId e maior que 0
if ($data["CursoId"] > 0) {
//Envia o registro para Atualizar ja que o mesmo tem CursoId
$data = $this->AtualizaRegistro($data["CursoId"]);
//Se salvar retorna true se não retorna falso
return $data;
}
$TodosOsCursos = self::all();
foreach ($TodosOsCursos as $key => $value) {
if ($value['NumeroDoCurso'] == $data['NumeroDoCurso'] || $value['NomeCurso'] == $data['NomeCurso']) {
return false;
}
}
$data['UsuarioId'] = Auth::user()->id;
return $data->save();
}
}
public function DeletarRepositorio($id)
{
$data = self::find($id);
if (is_null($data)) {
return false;
}
$data->delete();
return true;
}
public function AtualizaRegistro($CursoId)
{
if (Auth::check()) { //verifica se tem usuario logado
//Procura registro no banco pelo $id
$data = self::find($CursoId);
//Caso não encontrar registro no banco retorna falso, abortando a operação
if (is_null($data)) {
return false;
}
//Recebe todos os valores novos que chegaram
$input = Input::all();
//Atribui os valores novos no registro 'data' encontrados no banco
$data->fill($input);
//Atribui o usuario que executou a ultima ação no registro
$data['UsuarioId'] = Auth::user()->id;
//Salva os registros no banco e retorna se atalizou ou não
return $data->save();
}
}
public function RetornaListaDeCursoPorArea($AreaId){
$listaDeCursoPorArea = DB::table('Curso')->where('AreaId', $AreaId)->get();
return $listaDeCursoPorArea;
}
}