首页 > 解决方案 > Laravel:带有绑定参数的原始查询的空结果

问题描述

我需要使用 SQL Server 中的辅助连接数据库在 laravel 中获取一些数据。

我的代码是这样的:

        DB::connection('sqlsrv')->enableQueryLog();
        $clstamp = DB::connection('sqlsrv')
                    ->table('cl')
                    ->select('clstamp','ncont','no')
                    ->where("ncont", "507751167")
                    ->get();

        dd(DB::connection('sqlsrv')->getQueryLog(),$clstamp );

结果是:

此代码的结果

当我删除“->where”行时,我的数据就会出现。我确定我的 SQL 查询没问题,我在 SQL Server Management Studio 中尝试过。

我究竟做错了什么?使用不受我的 laravel 结构/迁移控制的模型创建查询和绑定的最佳方法是什么?这个 SQL Server 数据库是外部的,我只需要获取数据。

我的简单模型:

class PHC_cl extends Model
{
    //
    protected $connection= 'sqlsrv';
    protected $guarded = [];
    protected $primaryKey = 'clstamp';
    protected $table = 'cl';
}

如果我删除 ->where() 行,它会输出数据 ok - array->663 itens data ok

我已经尝试过使用 whereRaw,将条件放在“....”之间,但总是返回空。

我的其他方法代码:

        DB::connection('sqlsrv')->enableQueryLog();
        $sql = "
        SELECT clstamp,ncont,no
        FROM CL
        WHERE ncont like :ncont
        ";
        $clstamp = DB::connection('sqlsrv')->select(DB::raw($sql),[
            'ncont' => $data['nif']
        ]);
        dd(DB::connection('sqlsrv')->getQueryLog(),$clstamp );

我的 $data['nif] 是 '507751167' 结果是这样的:DB:raw的结果

标签: sql-serverlaraveleloquentbinding

解决方案


将您的代码更新为:

   DB::connection('sqlsrv')->enableQueryLog();
    $clstamp = DB::connection('sqlsrv')
                ->table('cl')
                ->select('clstamp','ncont','no')
                ->where('ncont','=', '507751167')
                ->get();

    dd(DB::connection('sqlsrv')->getQueryLog(),$clstamp );

推荐阅读