Wednesday, January 5, 2022

[FIXED] Query builded with division

Issue

I need to send an email every 48 hours from a datetime field. My sql query is:

select * from leads where datediff(NOW(),`level7_email_sent`)%2 = 0

How I do it with CakePHP query builder? My problem is division.

Whats I done is:

        $leads = $this->Leads->find();
            //->contain([])
        $leads->where(function (QueryExpression $exp, Query $q) {
                $datediff = $q->func()->dateDiff([
                    'NOW()' => 'literal',
                    'level7_email_sent' => 'identifier'
                ]);
                return $exp->eq('engagement_level',7)->eq($datediff,7);
            });

I don't know how to do the division, thanks.


Solution

I solved using HAVING

    $leads = $this->Leads->find();
    //->contain([])
    $datediff = $leads->func()->dateDiff([
        'NOW()' => 'literal',
        'level8_email_sent' => 'identifier'
    ]);
    $leads->select(['dateDiff'=>$datediff])
        ->enableAutoFields(true)
        ->where(['engagement_level'=>7])
        ->having(['MOD(`dateDiff`,2)'=>0]);


Answered By - Igor

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.