Я разработал бэкэнд API для использования на мобильных устройствах. Все работало отлично, прежде чем я взял код в другом домене для начала деплоя. Внезапно я заметил, что один из типов данных user_id изменился на string, где раньше был int, и все работает.

Это то, что я делаю в своем контроллере laravel

  $clubs=Club::with(['users' => function($q){
        $q->select('id','profilePic');
    }])->with('leagueCount')
    ->get();

   return response()->json([
        'success' => true,
        'clubs' => $clubs,
    ],200);

И это дает мне такой результат

success: true,
clubs: [
{
id: 8,
user_id: "34",  // this shouldn't be a string. It should be int.
 clubName: "PADELCENTER",
 clubDesc: "Testclub",
 color: "#424242",
 logo: "logotouse.png",
 created_at: "2018-05-12 07:44:40",
 updated_at: "2018-05-12 07:44:40",
 users: {
   id: 34,
   profilePic: "20KdcnX5Gb2dSfunwT8JtmBvcVopDmUwKmQ7XeUI.png"
 },
 league_count: [
 {
   id: 31,
   club_id: "8",
   total: "1"
 }
]
},

Вы можете видеть, что user_id - это string, это должно быть int

Есть ли способы принудительно установить тип данных в модели или где-то еще?

[Примечание: user_id имеет тип int и без знака в базе данных как внешний ключ для пользовательской таблицы.]

Благодарю.

2
Hkm Sadek 13 Сен 2018 в 14:07

2 ответа

Лучший ответ

Вы можете преобразовать свойство в целое число с помощью мутаторов Eloquent следующим образом:

class Club extends Model
{
    protected $casts = [
        'user_id' => 'integer',
    ];
}
4
thefallen 13 Сен 2018 в 11:13

Есть два способа решить эту проблему

В вашей модели вы можете преобразовать вывод из базы данных, например

$casts = [
'user_id' => 'int'
];

Или вы можете использовать Ресурс php artisan make:resource Club

И после этого вы можете просто в toArray методе

  public function toArray($request)
    {
        return [
            // do casting in here
        ];
    }
4
Adnan Mumtaz 13 Сен 2018 в 11:18