在整数上调用成员函数toSql()

时间:2017-07-20 07:11:37

标签: php mysql laravel

我有一个代码:

$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 

5 个答案:

答案 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的返回类型为inttoSql()需要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