2016-10-25 45 views
1

因此,我在写出了我的项目的不同版本中的此查询。无法在Laravel中复制DATE_FORMAT查询

$result = $db->select("SELECT `nID`, `txNome`, `txEmail` 
     FROM `".$this->tablename."` 
     WHERE `at_state` != 'invalid' 
     AND `dtCreated` < :weekAgo 
     AND DATE_FORMAT(dtCreated, '%w') = DATE_FORMAT(NOW(), '%w') 
     AND `remarketing_amigos_sent` = '1' 
     AND `amigo` IS NULL 
     AND `txEmail` NOT IN (
      SELECT `email` 
      FROM `utils`.`unsubscribe` 
      WHERE `email` = `".$this->tablename."`.`txEmail` 
      AND (`idCampaign` = :campaign OR `idCampaign` = '*') 
     ); 
    ", array(
     'campaign' => CoreHelper::getCampaignID(), 
     'weekAgo' => $aWeekAgo 
    )); 

和我想要将其转换为Laravel的查询生成器,我可以整件事转换除外DATE_FORMAT有点...我不知道如何将其转换成侃侃而谈。

应用程序应该每周发送一次电子邮件给人员列表,这就是为什么DATE_FORMAT在那里与平日相匹配的原因。 如何将其转换为查询生成器?

我当前的代码看起来像这样

$this->lead->where('at_state', '!=', 'invalid') 
       ->where('dtCreated', '<', $aWeekAgo) 
       ->where(???) 
       ->where('remarketing_amigos_sent', '1') 
       ->whereNull('amigo') 
       ->whereNotIn('txEmail', function($q) { 
        $q->select('email')->from('utils.unsubscribe')->where('idCampaign', CoreHelper::getCampaignID()); 
       })->get(); 

注意$这个 - >引线部分,故意不同,因为它指的是我的口才型号,而原来的版本是使用DB完成立面

+0

你能告诉你已经开始做的代码吗? –

+0

@RossWilson我用新的查询编辑了原文。 –

回答

2

您可以使用Laravel的whereRaw()函数来完成一些复杂的查询为:

->whereRaw("DATE_FORMAT(dtCreated, '%w') = DATE_FORMAT(NOW(), '%w')") 
+0

完美,就是这样。 –

+0

乐意帮助...:D –

0

你可以使用这个情况,我在这里展示的例子,我在我的项目已经实施。

$today = date("Y-m-d H:i:s"); 

$presentStudents = StudentAttendance::where('status_id', 1) 
->where('DATE_FORMAT(attendance_date,\'%Y-%m-%d\'', $today)