【发布时间】:2018-02-06 13:19:06
【问题描述】:
我知道这个问题已经有人问过了,但我找不到好的答案。
视图如下:
@foreach ($projects as $key => $project)
<tr id="{{$project->id}}">
<td>{{$project->id}}</td>
<td>{{$project->slug}}</td>
<td>{{$project->order}}</td>
<td>{{$project->public}}</td>
<td><a href="{{ route('admin.projects.show', $project->id)}}" class="btn btn-info btn-sm">View</a> <a href="{{ route('admin.project.edit', $project->id)}}" class="btn btn-success btn-sm">Edit</a></td>
</tr>
@endforeach
Ajax 代码如下:
$("tbody").sortable({
items: "> tr",
appendTo: "parent",
helper: "clone",
update: function( event, ui ) {
let newOrder = $(this).sortable('toArray');
$.ajax({
type: "POST",
url:'/admin/projects/updateOrder',
data: {ids: newOrder}
})
.done(function( msg ) {
// render table with new order?
});
}
}).disableSelection();
控制器功能如下:
public function updateOrder(Request $request)
{
$ids = $request->ids;
// en el array ids, los "keys" serían el orden, los cuales puedes modificar según lo que requieras
$caseQuery = 'CASE id ';
foreach ($ids as $order => $id) {
$caseQuery .= "WHEN $id THEN $order ";
}
$caseQuery .= ' END CASE';
DB::table('projects')
->whereIn('id', $ids)
->update(['order' => $caseQuery]);
}
错误:
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'CASE
id WHEN 2 THEN 0 WHEN 3 THEN 1 WHEN 1 THEN 2 WHEN 4 THEN 3 WHEN 5
THEN 4 WHEN 6 THEN 5 WHEN 7 THEN 6 WHEN 8 THEN 7 WHEN 9 T' for column
'order' at row 1 (SQL: update `projects` set `order` = CASE id WHEN 2
THEN 0 WHEN 3 THEN 1 WHEN 1 THEN 2 WHEN 4 THEN 3 WHEN 5 THEN 4 WHEN 6
THEN 5 WHEN 7 THEN 6 WHEN 8 THEN 7 WHEN 9 THEN 8 WHEN 10 THEN 9 WHEN
11 THEN 10 WHEN 12 THEN 11 WHEN 13 THEN 12 WHEN 14 THEN 13 WHEN 15
THEN 14 WHEN 16 THEN 15 WHEN 17 THEN 16 WHEN 18 THEN 17 WHEN 19 THEN
18 WHEN 20 THEN 19 WHEN 21 THEN 20 WHEN 22 THEN 21 WHEN 23 THEN 22
WHEN 24 THEN 23 WHEN 25 THEN 24 WHEN 26 THEN 25 WHEN 27 THEN 26 WHEN
28 THEN 27 WHEN 29 THEN 28 END CASE where `id` in (2, 3, 1, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29))
¿有人知道我为什么会收到此错误吗?
此代码用于在我拖放时更新值。
谢谢。
更新
控制器功能现在如下所示:
public function updateOrder(Request $request)
{
$ids = $request->ids;
// en el array ids, los "keys" serían el orden, los cuales puedes modificar según lo que requieras
$caseQuery = 'CASE';
foreach ($ids as $order => $id) {
$caseQuery .= "WHEN id = $id THEN $order ";
}
$caseQuery .= 'ELSE null';
$caseQuery .= ' END';
DB::table('projects')
->whereIn('id', $ids)
->update(['order' => $caseQuery]);
}
我在 laravel.log 上发现的错误是这样的:
Next Illuminate\Database\QueryException: SQLSTATE[HY000]: General 错误:1366 不正确的整数值:'CASEWHEN id = 26 THEN 0 WHEN id = 23 THEN 1 WHEN id = 19 THEN 2 WHEN id = 25 THEN 3 WHEN id = 27 THEN 4 WHEN id = 18 THEN 5 WHEN' 用于第 1 行的列“order”(SQL:更新
projects设置order= CASEWHEN id = 26 THEN 0 当 id = 23 THEN 1 当 id = 19 然后 2 当 id = 25 然后 3 当 id = 27 然后 4 当 id = 18 然后 5 当 id = 28 然后 6 当 id = 14 然后 7 当 id = 24 然后 8 当 id = 20 THEN 9 当 id = 12 THEN 10 当 id = 13 THEN 11 当 id = 17 THEN 12 当 id = 29 THEN 13 当 id = 15 THEN 14 当 id = 21 THEN 15 当 id = 16 THEN 16 当 id = 22 THEN 17 当 id = 4 THEN 18 当 id = 3 然后 19 当 id = 1 然后 20 当 id = 6 然后 21 当 id = 9 THEN 22 当 id = 8 THEN 23 当 id = 5 THEN 24 当 id = 2 THEN 25 当 id = 10 那么 26 当 id = 11 那么 27 当 id = 7 那么 28 否则 null END whereidin (26, 23, 19, 25, 27, 18, 28, 14, 24, 20, 12, 13, 17, 29, 15, 21, 16, 22, 4, 3, 1, 6, 9, 8, 5, 2, 10, 11, 7)) /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php:647 堆栈跟踪: #0 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php(607): Illuminate\Database\Connection->runQueryCallback('updateproject...', Array, Object(Closure)) #1 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php(477): Illuminate\Database\Connection->run('updateproject...', Array, 对象(闭包)) #2 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php(416): Illuminate\Database\Connection->affectingStatement('更新project...', Array) #3 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2152): Illuminate\Database\Connection->update('updateproject...',数组) #4 /home/vagrant/Code/Manifiesto/app/Http/Controllers/AdminController.php(141): 照亮\数据库\查询\生成器->更新(数组) #5【内部函数】:App\Http\Controllers\AdminController->updateOrder(Object(Illuminate\Http\Request)) #6 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(55): call_user_func_array(数组,数组) #7 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('updateOrder', Array) #8 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), 对象(App\Http\Controllers\AdminController),'updateOrder') #9 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Route.php(160): 照亮\路由\路由->runController() #10 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(574): 照亮\路由\路由->运行() #11 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #12 /home/vagrant/Code/Manifiesto/vendor/vsch/laravel-translation-manager/src/RouteAfterMiddleware.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #13 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Vsch\TranslationManager\RouteAfterMiddleware->handle(Object(Illuminate\Http\Request), 对象(闭包)) #14 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #15 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #16 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), 对象(闭包)) #17 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #18 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #19 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), 对象(关闭),“管理员”) #20 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #21 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(65): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #22 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), 对象(闭包)) #23 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #24 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #25 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), 对象(闭包)) #26 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #27 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #28 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), 对象(闭包)) #29 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #30 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #31 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), 对象(闭包)) #32 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #33 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #34 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), 对象(闭包)) #35 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #36 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #37 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(576): 照亮\管道\管道->然后(对象(闭包)) #38 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(535): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), 对象(照亮\Http\Request)) #39 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(513): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) #40 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #41 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request)) #42 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #43 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), 对象(闭包)) #44 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #45 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #46 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), 对象(闭包)) #47 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #48 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #49 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), 对象(闭包)) #50 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #51 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #52 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), 对象(闭包)) #53 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #54 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #55 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): 照亮\管道\管道->然后(对象(闭包)) #56 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #57 /home/vagrant/Code/Manifiesto/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #58 {主}
【问题讨论】:
-
检查我期望的原始查询不是您想要的。
-
如何进行调试?我尝试使用 ->toSql() 但我认为我做不到,因为我没有 get() 查询。
-
您在
CASE之前缺少 order 的值。 -
尝试在查询之前使用
DB::connection()->enableQueryLog()启用调试,然后使用$s = DB::getQueryLog()并将$s写入日志。它将与参数绑定一起输出。 -
@KikoSoftware 如果可以,请使用代码发布答案。