雄辩的ORM检查GET()中的IFNULL()

时间:2014-07-16 09:14:58

标签: php laravel-4 eloquent

我正在使用LARAVEL 4后端MySQL。我是新手。

我有一个声明,它返回来自3个不同表的记录,如下所示:

$templates = Template::with('children')
                    ->leftJoin('template_masters', function($join) {
                        $join->on('templates.template_master_id', '=', 'template_masters.id');
                    })
                    ->leftJoin('surveyes', function($join) {
                        $join->on('templates.survey_id', '=', 'surveyes.id');
                    })
                    ->get([
                    'templates.id',
                    'templates.survey_id',
                    'surveyes.title', // Here I want the IFNULL() condition e.g. IFNULL('surveyes.title','templates.title')
                    'templates.type',
                    'templates.created_at',
                    'template_masters.is_default'
                    ]);

基本上这会创建一个类似的查询:

select `templates`.`id`, 
    `templates`.`survey_id`, 
    `surveyes`.`title`, 
    `templates`.`type`, 
    `templates`.`created_at`, 
    `template_masters`.`is_default` 
from `templates` 
    left join `surveyes` on `templates`.`survey_id` = `surveyes`.`id` 
    left join `template_masters` on `templates`.`template_master_id` = `template_masters`.`id`

但我想要这样的查询:

select `templates`.`id`, 
    `templates`.`survey_id`, 
     IFNULL(`surveyes`.`title`, `templates`.`title`),
    `templates`.`type`, 
    `templates`.`created_at`, 
    `template_masters`.`is_default` 
from `templates` 
    left join `surveyes` on `templates`.`survey_id` = `surveyes`.`id` 
    left join `template_masters` on `templates`.`template_master_id` = `template_masters`.`id`

简而言之,我需要surveyes次调查title标题IFNULL(模板.标题{{1},而不是,.。 }。

如何在给定)的{​​{1}}声明中实现此目的?

感谢。

1 个答案:

答案 0 :(得分:4)

您需要使用原始声明:

...
->get([
  'templates.id',
  'templates.survey_id',
  DB::raw('IFNULL(surveyes.title,template_masters.title) as title'),

  // or if you use namespace:
  \DB::raw('IFNULL(surveyes.title,template_masters.title) as title'),

  'templates.type',
  'templates.created_at',
  'template_masters.is_default'
]);