2017-08-24 1 views
2

Bonne journée! Je suis nouveau à Laravel. J'ai essayé plusieurs façons de le faire mais ça me donne une erreur. Je suis en train de convertir cette requête SQL en éloquentgénérateur de requêtes laravel à partir de la requête brute

Select  t.employee_code, 
      CASE WHEN t.day = '2017-08-19' THEN t.PRESENT ELSE NULL END AS `2017-08-19`, 
      CASE WHEN t.day = '2017-08-20' THEN t.PRESENT ELSE NULL END AS `2017-08-20`, 
      CASE WHEN t.day = '2017-08-21' THEN t.PRESENT ELSE NULL END AS `2017-08-21`, 
      CASE WHEN t.day = '2017-08-22' THEN t.PRESENT ELSE NULL END AS `2017-08-22`, 
      CASE WHEN t.day = '2017-08-23' THEN t.PRESENT ELSE NULL END AS `2017-08-23`, 
      CASE WHEN t.day = '2017-08-24' THEN t.PRESENT ELSE NULL END AS `2017-08-24` 
FROM (
select e.employee_code, 
    Cast(e_l.time_in As date) As Day, 
    Case 
     WHEN e_l.time_in IS NULL THEN 'A' 
     WHEN DAYOFWEEK(e_l.time_in) In(7, 1) Then 'W' 
     ELSE 'P' 
    end as PRESENT 
from employee As e 
left join employees_logs As e_l on e.id = e_l.employee_id) 
AS t 

et moi avons essayé de cette façon éloquente

public static function statusReport($data){ 
$start_date = $data['start_date']; 
$end_date = $data['end_date']; 
$date_array = self::getDatesFromRange($start_date, $end_date); 

$query = DB::raw("(Select t.employee_code, 
      CASE WHEN t.day = '$start_date' THEN t.Present ELSE NULL END AS '$start_date')"); 
$query->addSelect(
     DB::raw("(
      SELECT employee.id as emp_id, 
      CONCAT(employee.firstname, " ",employee.lastname) AS employee_name, 
      CAST(employees_log.time_in as date) as date_given, 
      CASE WHEN employee_logs.time_in IS NULL THEN 'A' 
        WHEN leave.status_id = 4 AND leave_request.with_pay = 1 THEN 'L' 
        WHEN leave.status_id = 4 AND leave_request.with_pay = 0 THEN 'LOP' 
        WHEN DAYOFWEEK(employee_logs.time) In(7, 1) THEN 1 AS 'W' 
        ELSE 'P' END as status 
      LEFT JOIN employee_logs On employee.id = employees_logs.employee_id 
      JOIN leave On employee.id = leave.emp_id 
      JOIN leave_request On leave.id = leave_request.leave_id 
      WHERE employee_logs.time_in BETWEEN '$start_date' AND '$end_date') As `t`")); 
$data = $query->get(); 
return $data;  

}

this the error that I'm getting

la sortie attendue est cette requête dira le statut de l'employé dans chaque jour. Par exemple, si ce jour est Weekend, il affichera 'W' sur la sortie. si l'employé est absent «A» et s'il est présent «P». J'espère que quelqu'un peut me aider. Merci à l'avance

+0

Quelle erreur que vous obtenez, ajoutez votre question. –

+0

erreur de syntaxe, inattendue '"' dans C: \ xampp \ htdocs \ hrpayroll \ api \ app \ Http \ Modèles \ AttendanceReportModel.php sur la ligne 178 –

+0

Pourquoi avez-vous deux instructions' DB :: raw', vous aussi ne ' Je concaténerais le résultat, je dirais que l'erreur vient de là –

Répondre

0

Tout d'abord jeter un oeil à la méthode addSelect:

public function addSelect($column) 
{ 
    $column = is_array($column) ? $column : func_get_args(); 
    $this->columns = array_merge((array) $this->columns, $column); 
    return $this; 
} 

Cela ajoute que la colonne (s) en fusionnant avec des colonnes existantes sélectionnées.

Pour plus de précisions visite https://laravel.com/docs/5.4/queries#selects

Maintenant, je suppose que vous résoudrez votre problème sans utiliser la méthode addSelect.

Ma référence this

+1

merci pour l'effort que je vais l'apprécier si beaucoup –