it-swarm.com.ru

Laravel: синтаксическая ошибка или нарушение прав доступа: ошибка 1055

Я хочу использовать WhereIn и Groupby в Same Query для получения Result.

Я пробовал это:

$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();

Но я получил это сообщение об ошибке:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 'sbrtpt.loading.id' отсутствует в GROUP BY (SQL: выбрать * из загрузки, где идентификатор в группе (14, 15, 16) по vehicle_no)

32
Karthikvijayaveni

Короткий ответ

В массиве config\database.php -> "mysql"

Установите 'strict' => false, чтобы отключить все.

.... или же

Вы можете оставить 'strict' => true и добавить режимы к опции "mysql" в 

'mysql' => [
       ...
       ....
       'strict' => true,
       'modes' => [
            //'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_AUTO_CREATE_USER',
            'NO_ENGINE_SUBSTITUTION'
        ],
 ]

Подробный ответ

Возможно, вам не нужно отключать все strict опции ... Пожалуйста, ознакомьтесь с этим answer об этой проблеме.

58
Husam

Это, вероятно, SQL_MODE проблема. В вашем config/database.php, в соединении, измените

strict => false

Как в 

'mysql' => [
    'driver' => 'mysql',
    'Host' => env('DB_Host', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],
93
Antonio Carlos Ribeiro

У меня тоже была эта проблема, но после изменения 'strict' => true на 'strict' => false.
В:

[config\database.php -> массив «mysql»]

ошибка исчезнет.

4
Zakhele

При использовании groupBy в eloquent всегда включайте имя столбца, используемое в функции groupBy, в функцию select ().

$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')

Также не рекомендуется отключать строгий режим в файле конфигурации. Это может привести к тому, что поврежденные данные попадут в базу данных, такие как недействительные даты, без каких-либо предупреждений. Не делайте этого, если в этом нет крайней необходимости.

1
Thungdemo

Без модификации файла config\database.php

Установить 'strict' => falseв config\database.php может быть проблема безопасности . Таким образом, простым решением Laravel может быть сначала вызов get(), а затем groupBy('vehicle_no):

$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');
0
cespon