2017-02-23 12 views
1

Laravelクエリに変換する必要があるネイティブのPhp/Mysqlクエリがあります。私はlaravelの世界ではかなり新しく、面白いと思っていますが、私は3日以上この問題に取り組んでいます。Laravel Union with and joinオプション

は、ここでそれは私が望む結果を与える私の母国PHP/Myslクエリ

$sql = "SELECT a.employeeID, a.nric, a.fullName, b.salary, c.total_allowance, c.year, c.month, c.period, d.deptName, c.aws, c.additionals, 
      c.id, a.date_of_birth, c.total_additional 
    from employees a 
    LEFT OUTER JOIN salary b ON a.employeeID = b.employeeID 
    LEFT OUTER JOIN payrolls c ON a.employeeID = c.employeeID and year = '$presyear' and month = '$presmonth' and period = '$period' 
    LEFT OUTER JOIN department d ON a.designation = d.id 
    UNION 
    SELECT a.employeeID, a.nric, a.fullName, b.salary, c.total_allowance, c.year, c.month, c.period, d.deptName, c.aws, c.additionals, 
      c.id, a.date_of_birth, c.total_additional 
    from employees a 
    LEFT OUTER JOIN salary b ON a.employeeID = b.employeeID 
    LEFT OUTER JOIN payrolls c ON a.employeeID = c.employeeID and year != '' and month != '' and period != '' 
    LEFT OUTER JOIN department d ON a.designation = d.id 
    WHERE c.net_salary != ''"; 

だが、君たちは多分あなたはこの1つ上のいくつかの調整をしたいし、私は知りません。私はLravel

$result = Payroll::select('payrolls.id','payrolls.employeeID','fullName','month','year','period','department.deptName','payrolls.aws', 
         'payrolls.adjustment','payrolls.allowances','payrolls.alencashment','payrolls.housing_allowance', 
         'payrolls.med_reimburse','payrolls.overtime_hours','payrolls.overtime_pay','payrolls.reimbursement','payrolls.tips', 
         'net_salary','payrolls.total_additional','payrolls.total_allowance','payrolls.total_deduction','payrolls.total_cpf') 
       ->join('employees', 'payrolls.employeeID', '=', 'employees.employeeID','left') 
       ->join('department', 'employees.designation', '=', 'department.id','left') 
       ->where('payrolls.year','=',$presyear) 
       ->where('payrolls.month','=',$presmonth) 
       ->where('payrolls.period','=',$period); 

に得ることができるよう

は今、これは私がネイティブに何をしたかのようにすべてと外側の内側には、参加組合とを行うために正確にどのように知らない限りです。

私はLaravel 4.2.17

感謝を使用しています。

+0

誰でもどうぞ。 Hehehe。 –

答えて

0

私はそれを証明していないが、あなたは

$first = \DB::table('employees')->select(['employees.employeeID', 'employees.nric', 'employees.fullName', 'salary.salary', 'payrolls.total_allowance', 'payrolls.year', 'payrolls.month', 'payrolls.period', 'department.deptName', 'payrolls.aws', 'payrolls.additionals', 'payrolls.id', 'employees.id', 'employees.date_of_birth', 'payrolls.total_additional']) 
->leftJoin('salary', 'employees.id', '=', 'salary.employeeId') 
->leftJoin('payrolls', function($join) 
{ 
    $join->on('employees.id', '=', 'payrolls.employeeId')->on('year', '!=', '')->on('month', '!=', '')->on('period', '!=', ''); 
}) 
->leftJoin('department', 'employees.designation', '=', 'department.id') 
->where('payrolls.net_salary', '!=', ''); 


\DB::table('employees')->select(['employees.employeeID', 'employees.nric', 'employees.fullName', 'salary.salary', 'payrolls.total_allowance', 'payrolls.year', 'payrolls.month', 'payrolls.period', 'department.deptName', 'payrolls.aws', 'payrolls.additionals', 'payrolls.id', 'employees.id', 'employees.date_of_birth', 'payrolls.total_additional']) 
->leftJoin('salary', 'employees.id', '=', 'salary.employeeId') 
->leftJoin('payrolls', function($join) 
{ 
    $join->on('employees.id', '=', 'payrolls.employeeId')->on('year', '=', $presyear)->on('month', '=', $presmonth)->on('period', '=', $period); 
}) 
->leftJoin('department', 'employees.designation', '=', 'department.id')->union($first)->get(); 

https://laravel.com/docs/4.2/queriesを参照してくださいような何かを行うことができます。

あなたが行くことができない場合は、いつも\ DB :: https://laravel.com/docs/4.2/database#running-queriesを参照してください。