2016-09-23 8 views
3

それは多分明白と私は完全にポイントを逃していますが、私はSITE_ID例えば、user_idを持つ複数の行を含むテーブルを持っていますもともと古いDEVによって書かれた幼虫SQLSTATE [42000]:構文エラーまたはアクセス違反:1055年式#2

ldstaff | ld_site 
____________________ 
    3   1 
    3   2 
    4   1 

MySQLのクエリは、スタッフのIDが自分の名前を見つけましたし、このようなものを作るために一緒にすべてのサイトをCONCAT。

StaffID | Name | sites 
    3  Dave 1,2 

このクエリは、もともとしかし、我々はエラーSQLSTATE [42000]を持って同じ結果を得るために、新たなシステムの一部としてLaravelに書き込むしようと、これまでとき

SELECT `ld_staff` as staffID ,a.name,GROUP_CONCAT(`ld_site`) as sites FROM `lead_distribution` l 

LEFT JOIN users a ON a.crm_id = l.ld_staff 

WHERE ld_enabled = 1 AND 

`account_type` = 1 AND `active` = 1 AND `no_more` = 0 AND network_team > 0 AND renewal_team = 0 

GROUP BY `ld_staff` 

として書かれました:構文エラーまたはアクセス違反:1055式#2問合せを改ざんしようとしても、常にこの問題が戻ってきます。それを読むことは、sql_modeのように思われますが、このタイプのクエリはonly_full_group_byで許可されていないので、sql_modeを変更してもこのエラーはそのままです。

幼虫のクエリが

$data = DB::table('lead_distribution') 
      ->join('users','ld_staff','=','users.crm_id') 
      ->select("lead_distribution.ld_staff",'users.name',DB::raw("GROUP_CONCAT(`ld_site`) as sites")) 
      ->where('users.account_type', '=', 1) 
      ->where('users.active', '=', 1) 
      ->where('users.no_more', '=', 0) 
      ->where('users.network_team', '>', 0) 
      ->where('users.renewal_team', '=', 0) 
      ->groupBy('lead_distribution.ld_staff') 
      ->get(); 

あるすべてのヘルプは

+1

sql_strictモードを無効にする 'database.php'の' strict '=> false; 'を使ってみることができます – jaysingkar

+0

私の神様、そういうばかげて、ありがとうございます – Rlemm1991

+0

これは本当にf ***です私は一日を無駄にしている、とにかく感謝http://stackoverflow.com/users/3687745/jaysingkar –

答えて

1

素晴らしいことだ私は、この問題が発生し、それがGROUP BY句の集約関数を含むことによって解決しまいました。

私はこれを読んだところ、私は忘れてしまったが、集計関数は、指定されたsql_mode only_full_group_byモードに含まれている必要があります。だから、

、その後、laravelによって生成クエリを実行しようとするかどうかを確認->toSql()->get()を置き換えることにより、laravelによって生成SQLクエリをダンプしてみ ->groupBy(['lead_distribution.ld_staff','sites'])または->groupBy(['lead_distribution.ld_staff','users.name','sites'])

便利な先端

を使用してみてくださいエラーが発生します。

回答がそれを固定@jaysingkar

+0

あなたのヒントを保存する –

6

、それを逃すための私の愚かな間違い。 config/database.php

変更で

'strict' => true

+0

tnxしかし、何が '厳密'ですか? –

+0

申し訳ありませんが、config/database.php内の各データベース構成に対して、 'strict'というフィールドを追加してfalseに設定することができます – Rlemm1991

1

'strict' => falseへのconfig/database.phpで

変更]厳格」に=> true 'に厳しい' => falseを
とクリアキャッシュ
PHP職人の設定:キャッシュ
問題が解決されます。

関連する問題