【问题标题】:Laravel Union with and in join optionLaravel Union with and in join 选项
【发布时间】:2017-02-23 09:16:09
【问题描述】:

我有一个本地 Php/Mysql 查询,我需要将其转换为 Laravel 查询。我对 laravel 的世界很陌生,发现它很有趣,但我在这个问题上已经超过 3 天了。

这是我的原生 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 != ''";

它给了我想要的结果,但我不知道你们是否需要对此进行一些调整。

现在这是我在 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

谢谢。

【问题讨论】:

  • 任何人请。呵呵呵呵。

标签: php mysql laravel


【解决方案1】:

我没有证明这一点,但你可以做类似的事情

 $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::select 看到https://laravel.com/docs/4.2/database#running-queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多