我有一个代码:
$update= DB::table('Appraiser_commands')->where('cycle_id', $cycleid)->where('user_id',$userId)->update(['mode' => $mode,'Appraiser_commnd'=>$json])->toSql();
echo $update;exit;
我正在尝试使用toSql()
将laravel查询转换为mysql但是我收到了像
这样的错误在整数
上调用成员函数toSql()
然后我试了
DB::table('Appraiser_commands')->where('cycle_id', $cycleid)->where('user_id',$userId)->update(['mode' => $mode,'Appraiser_commnd'=>$json])
DB::enableQueryLog();
$queries = DB::getQueryLog();
dd(end($queries));
但它会将输出返回为' false'我得到了预期的输出。我不知道为什么会发生这种情况。感谢任何帮助。
已分出的输出:
UPDATE table_name
SET Appraiser_commnd=value, mode=value2,...
WHERE cycle_id=some_value
答案 0 :(得分:5)
当您调用update()
时,它会执行查询并返回受影响的行数(整数)。然后,您在整数上调用toSql()
。这导致了您看到的错误。
如果您在不运行查询的情况下尝试查看SQL,则需要执行以下操作:
// start the query but don't execute it
$query = DB::table('Appraiser_commands')
->where('cycle_id', $cycleid)
->where('user_id', $userId);
// use the grammar object to get the update sql
$sql = $query
->getGrammar()
->compileUpdate($query, ['mode' => $mode, 'Appraiser_commnd' => $json]);
如果您确实想要执行查询,还要获取SQL,则可以执行以下操作:
// start the query but don't execute it
$query = DB::table('Appraiser_commands')
->where('cycle_id', $cycleid)
->where('user_id', $userId);
// use the grammar object to get the update sql
$sql = $query
->getGrammar()
->compileUpdate($query, ['mode' => $mode, 'Appraiser_commnd' => $json]);
// actually run the update statement
$updated = $query
->update(['mode' => $mode, 'Appraiser_commnd' => $json]);
此外,您可以在查询日志中查看sql,但必须在执行语句之前启用查询日志:
// enable the query log
DB::enableQueryLog();
// execute the update
DB::table('Appraiser_commands')
->where('cycle_id', $cycleid)
->where('user_id', $userId)
->update(['mode' => $mode, 'Appraiser_commnd' => $json]);
// view the query log
dd(DB::getQueryLog());
答案 1 :(得分:1)
执行以下操作:
a)在功能开始时:
DB::enableQueryLog();
b)执行查询后执行以下操作:
dd(DB::getQueryLog());
它将提供整个查询
答案 2 :(得分:1)
DB::enableQueryLog();
$update= DB::table('Appraiser_commands')->where('cycle_id', $cycleid)->where('user_id',$userId)->update(['mode' => $mode,'Appraiser_commnd'=>$json])
$queries = DB::getQueryLog();
dd(end($queries)); // only last query
删除toSql并尝试此
答案 3 :(得分:1)
update
的返回类型为int
,toSql()
需要Builder实例。
如果在where子句中使用AND
,您可以将查询更改为以下内容并尝试将其sql转储为
$update = DB::table('Appraiser_commands')
->where(
['cycle_id', '=', $cycleid],
['user_id', '=', $userId]
)->update([
'mode' => $mode,
'Appraiser_commnd' => $json
]);
如果在where子句中使用OR
,可以尝试
$update = DB::table('Appraiser_commands')
->where('cycle_id', $cycleid)
->orWhere('user_id', $userId)
)->update([
'mode' => $mode,
'Appraiser_commnd' => $json
]);
执行查询后
$queries = DB::getQueryLog();
dd($queries);
答案 4 :(得分:1)
Laravel 查询构建器和{{1> 更新查询 不 原始查询 }}仅适用于选择查询 但是如果你想获得先前在laravel中执行的查询而不是遵循这个
How to get the query executed in Laravel 5 ? DB::getQueryLog returning empty array