无法在Laravel中复制DATE_FORMAT查询

时间:2016-10-25 13:10:24

标签: php mysql laravel eloquent laravel-query-builder

所以,我在我的项目的不同版本中写了这个查询。

    $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位之外的所有内容...我不知道如何将其转换为Eloquent。

应用程序应每周向人员列表发送一次电子邮件,这就是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();

请注意,$ this-&gt;引导部分故意不同,因为它指的是我的 Eloquent Model ,而原始版本是使用数据库完成的门面

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

尝试:

->where(DB::raw("DATE_FORMAT(dtCreated, '%w') = DATE_FORMAT(NOW(), '%w')"))

https://laravel.com/docs/5.3/database#running-queries

希望这有帮助!

答案 2 :(得分:0)

你可以使用这个条件,我在这里展示一个例子,我在我的项目中实现了它。

if p:
     # supposed to be my wild card expression
     mongoExp={"$or":[{"$eq":False},{"$ne":False}]}
  else:
     # where field is equal to False
     mongoExp={"$eq": False}

  cursor=self.zel.find({"xxx": mongoExp}).sort("field1", pymongo.DESCENDING)