2016-11-30 10 views
0

次のクエリを使用していますが、実行中にmysql構文エラーが発生しました。私はcakephp 3フレームワークを使用しています。この状態ではエラーが発生しています(>where([DATE('Bookings.created') => date("Y-m-d")]))。この問題を回避する方法を提案できます。SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。

$this->loadModel('ServiceManager.Bookings'); 
      $queryTodayAppointment = $this->Bookings->find('all') 
       ->select(['Users.fullname', 'Bookings.slot_time']) 
       ->where([DATE('Bookings.created') => date("Y-m-d")]) 
       ->contain(['Users']) 
       ->order(['Bookings.id' => 'DESC']) 
       ->limit(5); 

答えて

0

をあなたが実際にこれを実装するための多くの方法があるDATE関数を使用する必要がありますと仮定。

(それはあなたがすでにやってしようとしていたものだが、あなたは、単に機能を引用するのを忘れて)

->where(["DATE(Bookings.created)" => date("Y-m-d")]) 

しかし、あなたはまた、ケーキのSQL関数を使用することができます(reference

$query = $this->Bookings->find(); 
$date = $query->func()->date(['Bookings.created' => 'identifier']); 
$query->select(['Users.fullname', 'Bookings.slot_time']) 
    ->where(function ($exp, $q) use($date) { 
     return $exp->eq($date, date("Y-m-d")); 
    }) 
    ->contain(['Users']) 
    ->order(['Bookings.id' => 'DESC']) 
    ->limit(5); 
+0

これを使用して、 - >(DATE( 'Bookings.created') "=> date(" Y-m-d ")])、SQLは実行されていますが、データを取得しません。詳細については、作成されたフィールドタイプがDateTimeです。今日作成されたデータを欲しがっています。 – Ashish

+0

申し訳ありませんが、タイプミスがありました。一重引用符を削除するのを忘れてしまった。私は編集するつもりです – arilia

0

ここでDATE()関数を使用する必要はありません。ただ、現在の日付とのデータを比較:

->where(['Bookings.created' => date("Y-m-d")]) 
+0

彼らは1最も簡単な同等ではない。 'DATE()'は、 'Bookings.created'内の任意の時間コンポーネントを削除します。 – eggyal

+0

私の悪い、忘れていたのはDATETIMEだった。 – Aarrbee

関連する問題