Codecept Laravel макет базы данных MySQL в JSON - PullRequest
0 голосов
/ 05 февраля 2019

Макет, который я создал, чтобы заполнить базу данных строкой, не понимает, что ему нужно преобразовать данные в JSON перед сохранением их в базе данных.По какой-то причине, когда данные из макета вставляются в базу данных, они пропускают приведение к JSON.Поэтому, когда логика выбирает строку из базы данных, она возвращает эту ошибку.

json_decode() expects parameter 1 to be string, array given

Если у меня это как массив в макете.Это выдаст эту ошибку, когда мы декодируем в контроллере.Если я кодирую его в макете, он возвращает ту же ошибку.Если я кодирую его в макете и удаляю актерский состав из модели, он работает как положено.

Кто-нибудь знает, как это сделать правильно?

это мой макет

class SettingMocks
{
    public static function getSetting() {
        return [
            'id' => 1,
            'name' => 'Standard',
            'settings' => json_encode([
                'objective' => "CONVERSIONS",
                'gender' => [1,2],
            ])
        ];
    }
}

это моя модель

class Setting extends Model
{
    protected $guarded = [];
    protected $casts = [
        'settings' => 'json',
    ];
}

1 Ответ

0 голосов
/ 05 февраля 2019

Может быть с мутаторами и аксессором в вашей модели примерно так:

public function getSettingsAttribute($value)
{
    return json_decode($value);
}

public function setSettingsAttribute($value)
{
    $this->attributes['settings'] = json_encode($value);
}
...