2016-12-20 1 views
-4

以下のコードはうまく動作しますが、同じDBを使ってcakephp3プロジェクト全体をコピーすると、以下のエラーが表示されます。同じコードはどこか別の場所で動作するので、これを修正する方法はわかりません。私は最新のWamp64、win10を使用しています。残りのcakephp3プロジェクトは正常に動作します。他のコンピュータはwamp64とwin7を使用しました。同じcakephp3コードでレコードを見つけることができない他のコンピュータでも動作しない

解決策はありますが、これにはDB設定を変更する必要があり、コードを変更することをお勧めします。

Error related to only_full_group_by when executing a query in MySql

エラー:SQLSTATE [42000]:構文エラーまたはアクセス違反:SELECTリストの1055年式#11は、GROUP BY句ではなく、機能的ではない非集約列 'aptutori_test.Lessons.id' を含みますGROUP BY句の列に依存します。これはsql_modeの互換性がありません=ここ

$options['fields'] = array('DISTINCT Student.* ','Guardian.* '); 

     $options['conditions'] = array('Lessons.tutor_id' => $tutorId,'Student.student_inactive'=>0, 
      'Lessons.lesson_date >='=> $currDate, 'Lessons.makeup_lesson' => 0,'Lessons.forefit' => 0); 


     $fields = [ 
      'Student.first_name','Student.last_name','Student.id',"Student.address_street","Student.address_suburb","Student.address_postcode","Student.class_year", 
      "Guardian.id",'Guardian.guardian_first_name',"Guardian.guardian_last_name" 
     ]; 

     $query = $this->Lessons->find('all'); 

     $students = $query->where($options['conditions'])->autoFields(true) 
      ->select($fields)->distinct(["Student.id",'Guardian.id']) 
      ->join($options['joins']) 
     ; 

     $this->set('student',$students); 
+2

エラーメッセージに注意してください。それらを読みます。あなたがその意味を理解していない場合は、Googleに連絡してください:**これはsql_mode = only_full_group_by **と互換性がありません**この設定を変更してください。しかし、ほとんどの設定でクエリを実行し、特定の設定に依存しないようにする方がよいでしょう。 – burzum

+0

私はそれをgoogleにしました。私はcakephp3を使ってこれを修正する方法がわかりません。あなたは答えを持っています、それを共有してください – jagguy

+0

私はgoogleとcakephp3で私は何をするべきか分からないと言いました。なぜ私は2回印を付けるべきですか?多分誰かが質問をマークしたら、戻ってくるのではなく混乱させていることを修正する機会を与えてくれるかもしれません。 – jagguy

答えて

0

ONLY_FULL_GROUP_BYは、DBの設定を変更することなく、問題を回避できるコードです。

$students = $this->Lessons->find() 
          ->contain([ 
           'Students', 
           'Students.Guardians']) 
          ->select([ 
           'Students.last_name', 
           'Students.first_name', 
           'Students.id', 
           'Lessons.student_id', 
           'Lessons.tutor_id', 
           'Students.has_credit', 
           'Lessons.student_id', 
           'Lessons.id', 
           'Students.class_year', 
           'Lessons.subject_id', 
           'Guardians.guardian_last_name', 
           'Guardians.guardian_first_name', 
           'Students.address_street', 
           'Students.address_suburb', 
           'Students.address_postcode', 
           'Guardians.id']) 
          ->where([ 
           'Lessons.tutor_id' => $tutorId, 
           'Students.student_inactive' => 0, 
           'Lessons.lesson_date >=' => $currDate, 
           'Lessons.cancelled_lesson' => 0, 
           'Lessons.forefit' => 0]) 
          ->order([ 
           'Lessons.lesson_date' => 'ASC', 
           'Lessons.start_time' => 'ASC']) 
          ->hydrate(true); 

$gdata = array(); 
$studentIds = array(); 

foreach ($students as $i => $item) { 

    if (in_array($item['student']['id'], $studentIds)) { 
     continue; 
    } else { 

     array_push($studentIds,$item['student']['id']); 

     $gdata[$i]['student']['id'] = $item['student']['id']; 
     $gdata[$i]['student_id'] = $item['student_id']; 
     $gdata[$i]['student']['first_name'] = $item['student']['first_name']; 
     $gdata[$i]['student']['last_name'] = $item['student']['last_name']; 
     $gdata[$i]['student']['guardian']['guardian_first_name'] = $item['student']['guardian']['guardian_first_name']; 
     $gdata[$i]['student']['guardian']['guardian_last_name'] = $item['student']['guardian']['guardian_last_name']; 
     $gdata[$i]['student']['address_street'] = $item['student']['address_street']; 
     $gdata[$i]['student']['address_suburb'] = $item['student']['address_suburb']; 
     $gdata[$i]['student']['address_postcode'] = $item['student']['address_postcode']; 
     $gdata[$i]['student']['class_year'] = $item['student']['class_year']; 
    } 
} 
関連する問題