Laravel 布尔值 returns “1”/“0” 而不是查询中的 true/false

Laravel boolean returns "1"/"0" instead of true/false in query

我有一个查询 returns 我的 REST API 上的布尔字段(顺便说一句,我在 SQL 服务器上)是用 Laravel 开发的几天前它返回的值是 true/false,但现在它 returns 那个布尔值是字符串:“1”/“0”。

知道它是什么吗?

我试过像这样在我的模型上使用铸造:

 protected $casts = [
    'status' => 'boolean',
 ];

这是我的查询:

return DB::table('dbo.visits as V')
        ->leftJoin('dbo.reports AS R', 'R.id_visit', '=', 'V.id')
        ->select('R.id','R.status'); // status is the boolean

提前致谢。

当您定义以下内容时:

protected $casts = [
  'status' => 'boolean',
];

您正在模型上定义它。但是,当您使用 DB::table() 启动查询时,您并未使用模型 ,因此绑定实际上并不适用。使用您的模型发起查询:

return Visit::leftJoin('dbo.reports AS R', 'R.id_visit', '=', 'dbo.visits.id')
->select('R.id','R.status'); // status is the boolean

注意:由于此时别名不可用,不得不将查询从 V.id 调整为 dbo.visits.id

当您使用 Eloquent 模型时,可以定义转换。在您提供的代码中,您使用了查询构建器,然后根本没有使用 Eloquent 模型,因此没有进行任何转换。

您想做的是将此功能添加到您的模型中。每次使用模型检索数据时,都会调用与属性名称匹配的函数,将数据库中的原始数据转换为所需的格式。

public function getStatusAttribute($value)
{
        return $value ? 'Yes' : 'No';
}