Как использовать сумму и объединить 3 таблицы с помощью laravel6? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть 3 таблицы, таблица зарплат salaries(id, name) и таблица pointages pointages(id, datep, salarie_id, sold) и таблица avances avances(id, datea, montantA, salarie_id).

таблица зарплат

Id  name
1   kamal   
2   imad    

таблица pointages

id  datep       Salarie_id  sold
1   11/03/2020      1        120
2   05/03/2020      1        100
3   06/03/2020      2        50
4   07/03/2020      2        20

таблицы avances

id  datea         montantA    Salarie_id
1   11/03/2020    120          1
2   02/03/2020    50           1

по этим 3 таблицам я хочу восстановить salaries.id и salaries.name и сумму (pointages.sold) и сумму (avances.montantA), как это

Salarie.id  Salaries.nom    Sum(sold)   Sum(montantA)
1              kamal           220          170
2              imad            70           0

Я выполняю эту функцию etatq1u контроллера, но она дает мне ошибочные суммы и единую запись заработной платы1, потому что нет возможности для записи 2 (зарплаты 2). Вот результат ошибки, который дает мне:

id:1
nom:kamal
sold:440
montantA:340

SalarieController. php

public function etatq1u(request $request){

      $dataP = DB::table('salaries')
         ->join('pointages','pointages.salarie_id','salaries.id')
         ->join('avances','avances.salarie_id','salaries.id')
          ->selectRaw('salaries.id,salaries.nom,SUM(pointages.sold) as sold,SUM(avances.montantA) as avance')
          ->groupBy('pointages.salarie_id')
          ->get();
          return response($dataP);
}

etatq1.balde. php

 $.ajax({
          type: 'get',
          url: "{{ route('salarie.etatq1u') }}",
          data: {
                 'annee':ann,
                 'mois':moi,
                 'salarie_id':sal,
                 'chantier_id':chan,
                 'unite' : unite
                },
          success: function(data1){
              console.log(data1);
          },
          error: function(){
              console.log('error');
          },
          });

1 Ответ

0 голосов
/ 12 марта 2020

использовать UNION , поскольку таблица avances не содержит данных imad

    SELECT
      id
      , name
      , SUM(sold) as sold
      , SUM(montantA) as avance 
    FROM
      ( 
        SELECT
          salaries.id
          , name
          , sold
          , null as montantA 
        FROM
          salaries 
        LEFT JOIN 
            pointages 
        ON salaries.id = pointages.Salarie_id 

        UNION 

        SELECT
          salaries.id
          , name
          , null as sold
          , montantA 
        FROM
          salaries 
        LEFT JOIN 
            avances 
        ON salaries.id = avances.Salarie_id
      ) tbl 
    group by
      tbl.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...