vendor - laravel php nova




Laravel: Erro de sintaxe ou violação de acesso: Erro 1055 (4)

Eu quero usar WhereIn e Groupby na mesma consulta para buscar Result.

Eu tentei isso:

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

Mas recebi esta mensagem de erro:

SQLSTATE [42000]: Erro de sintaxe ou violação de acesso: 1055 'sbrtpt.loading.id' não está em GROUP BY (SQL: selecione * do carregamento onde o id no grupo (14, 15, 16) por vehicle_no)


Sem modificar o arquivo config \ database.php

Definir 'strict' => false no config\database.php pode ser um problema de segurança . Portanto, uma solução simples do Laravel pode ser a primeira chamada de get() e, em seguida, groupBy('vehicle_no) :

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

Resposta curta

Em config\database.php -> array "mysql"

Defina 'strict' => false para desativar tudo.

.... ou

Você pode deixar 'strict' => true e adicionar modos à opção "mysql" em

'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'
        ],
 ]

Resposta detalhada

Pode não ser necessário desativar todas as opções estritas ... Consulte esta answer sobre este problema.


Provavelmente, este é um problema do SQL_MODE . No seu config/database.php , na conexão, altere

strict => false

Como em

'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,
],

Sempre que usar groupBy em eloquente, sempre inclua o nome da coluna usada na função groupBy na função select ().

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

Também é uma prática ruim desativar o modo estrito no arquivo de configuração. Isso pode fazer com que dados corrompidos entrem no banco de dados, como datas inválidas, sem avisos. Não faça isso, a menos que seja absolutamente necessário.





laravel-5