phpsql-serverlaraveleloquentlaravel-query-builder

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


I have a query that returns a boolean field (by the way, I'm on an SQL Server) on my REST API developed with Laravel and a few days ago it was returning the value as true/false, but now it returns that boolean value as String: "1"/"0".

Any idea on what could it be?

I tried using casting on my Model like this:

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

This is my query:

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

Solution

  • When you're defining the following:

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

    You're defining it on the model. However, when you initiate your query using DB::table(), you're not using the model, so the binding doesn't actually apply. Initiate your query using your model:

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

    Note: Had to adjust query to dbo.visits.id from V.id due to aliasing not being available at that point.