2016-07-08 7 views
0
select * from user where HOUR(NOW()) BETWEEN earliest_login AND latest_login 

earliest_loginlatest_loginは2つの列です。cakephpの間の節3

$query->where(
    [ 
     function($exp) { 
      return $exp->between('HOUR(NOW())', 'earliest_login', 'latest_login'); 
     } 

それが機能していない:

私は、私が試してみました

コードがあるcakephp3でこれを書くことができますか教えてください。

解決策がある場合は教えてください。

+0

をお読みください? – M4R1KU

+0

はいクエリーが正しく実行されていません。オブジェクトオブジェクトのタイプはearliest_loginで、latest_loginはnullです。 –

+1

duplicatの質問http://stackoverflow.com/questions/26430259/cakephp-3-0-between-find-condition –

答えて

2

フィールド名は式で使用され、SQLスニペットには信頼できないコンテンツが含まれてはいけません。

あなたは使用することができます:

$query = $users->find() 
->where(function ($exp, $q) { 
    return $exp->between('Users.created', date1, date2); 
}) 

が、これは似たようなのようなSQLを作成します。

select * from users WHERE created BETWEEN '$date1' AND '$date2' 

ます。また、クエリ内にGT()およびLT()を使用することができます

$query = $articles->find() 
    ->where(function ($exp) { 
    return $exp 
     ->gt('created', '2016-07-05 12:02:15') 
     ->lt('created', '2016-07-10 12:02:15'); 
}); 

と二つの日付より防災情報については

$query = $this->Users->find(); 

$diff= $query->func()->dateDiff(['2016-07-04 12:02:15', '2016-07-07 18:29:57']); 

$query->select(['difference' => $diff,]); 

間differeceをしたい場合は、エラーを取得してください。このリンク http://book.cakephp.org/3.0/en/orm/query-builder.html

+0

あなたの例は、OPが表示しているものとは異なるケースを解決しています。 – ndm