'Laravel. Json column with cast as array are returning as a string when using JOIN in query

Laravel 8. I have two tables(models) 'employees' and 'positions'. In a model 'employees' I have a casts:

protected $casts = [
     'academic_post' => 'array'
];

academic_post is stored as a JSON. When I`m getting positions, joining them with employees:

$employees = DB::table('positions')
    ->select('employees.*', 'positions.*')
    ->where('department_tag', '=', $this->department_tag)
    ->leftJoin('employees', 'positions.email', '=', 'employees.email')
    ->get();

Problem: as employees table is used in leftJoin, $employees[0]->academic_post gives a string, not being casted as an array. I know I can make a foreach loop and use json_decode for each row to make an array, but why array casting is not working in this kind of query? If Im using for example: Employee::find(1); - Im getting column academic_post as array, as expected. I just want it to work stright from a query, not using any kind of loop. Any suggestions?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source