当我尝试填充动态下拉列表时出现SQLSTATE [42000]错误

问题描述 投票:0回答:2

我正在尝试填充3个动态下拉菜单,以从目录中过滤图像。

我需要通过情感(在我的代码中为西班牙语中的情感)过滤它们,它们只有3个幸福,愤怒和悲伤(alegria,ira,tristeza),这些类别中的每个类别都可以具有3个强度级别,例如高,中和低(中音,中音,巴霍)。

因此,例如,当您选择anger+level of activation(它必须仅按照该顺序,意味着情感应该始终优先)时,它应该用这些规格的图像填充第三个drop-down

我数据库中的我的表Emocion仅具有2列idemocion,并记录了3种情绪。

我尝试在Schema::defaultStringLength(191);上添加此行app/Providers/AppServiceProvider.php,但无法正常工作,我尝试了在config\database.php->"mysql"array中将'strict' => false设置为全部禁用。

目前,我只是试图填充数据库中的第一个下拉列表。

这是我的控制器的代码:

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use DB;
class PlantillaImagenesController extends Controller{

    public function index()
    {
            $emocion_list =  DB:: table('Emocion')
                                ->groupBy('Emocion')
                                ->get();
             return view ('admin.Imagen.index')->with('users', User::all())->with('emocion_list', $emocion_list);
    } 

}

这是我的前两个下拉菜单:


<div class="input-group mb-3">
    <div class="input-group-prepend">
        <label class="input-group-text" for="inputGroupSelect01">Emocion</label>
    </div>
    <select name="emocion"class="custom-select input-lg dynamic"  id="emocion" data-dependent = "intensidad">                                                    
        <option value="">Selecciona Emocion</option>
        @foreach ($emocion_list as $emocion )
            <option value="{{ $emocion->emocion }}">{{$emocion->emocion }}</option>
        @endforeach
    </select>
    </div>



    <div class="input-group mb-3">
    <div class="input-group-prepend">
        <label class="input-group-text" for="inputGroupSelect01">Intensidad</label>
    </div>
    <select name="intensidad" class="custom-select" id="intensidad" data-dependent = "imagen">                                                    

    </select>
    </div> 

和我的路线文件:

Auth::routes();


Route::get('/home', 'HomeController@index')->name('home');

Route::namespace('Admin')->prefix('admin')->middleware(['auth',  'auth.admin'])->name('admin.')->group(function(){
    Route::resource('/ImagenAudioVideo',  'PlantillaController', ['except' => ['show', 'create', 'store'] ]);
    Route::get('/Imagen',  'PlantillaImagenesController@index'); // <-------------------------->this one
    Route::resource('/Audio',  'PlantillaAudiosController', ['except' => ['show', 'create', 'store'] ]);
    Route::resource('/Video',  'PlantillaVideosController', ['except' => ['show', 'create', 'store'] ]);
    Route::resource('/ImagenAudio',  'PlantillaImagenesAudioController', ['except' => ['show', 'create', 'store'] ]);
    Route::resource('/EditarUsuario',  'EditarUsuariosController', ['except' => ['show', 'create', 'store'] ]);
    Route::get('/', function () {
    return view('home');
});

});

收到此错误:

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'configiem.Emocion.IdEmocion',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by不兼容(SQL:从Emocion组中按* Emocion选择*)

php mysql laravel
2个回答
1
投票

您的错误在此代码上

 $emocion_list =  DB:: table('Emocion')
                           ->groupBy('Emocion')
                           ->get();

您必须在select()上其他未在groupBy()或聚合函数中使用的列上进行污染。

写这个,我认为它将起作用

 $emocion_list =  DB:: table('Emocion')
                           ->select('emocion')
                           ->groupBy('emocion')
                           ->get();

0
投票

使用

 $emocion_list =  DB::table('Emocion')
                       ->select('emocion')
                       ->groupBy('emocion')
                       ->get();

如果使用的是雄辩的ORM,则>

 $emocion_list =  Emicon::select('emocion')
                       ->groupBy('emocion')
                       ->get();
© www.soinside.com 2019 - 2024. All rights reserved.