У меня странная ошибка при сохранении зашифрованного массива в Laravel. Модель никогда не обновляется, даже когда вызывается save ().
Нет ошибок консоли или SQL. Когда шифрование отключено, ошибок нет, и модель успешно обновляется.
В контроллере я называю модель следующим образом:
$userData = UserData::where('user_id', $user_id)->first();
Затем я вытягиваюмассив:
$encryptedData = $userData->app_data;
И я хочу добавить в этот массив, например,
$encryptedData['new'] = 'axy';
$encryptedData['time'] = time();
Затем я обновляю модель и сохраняю ее:
$userData->app_data = $encryptedData;
$userData->save();
Однако,Здесь начинается проблема. Модель не обновляется. Остается так, как будто ничего не происходит. Следовательно, если я обновляю (), я получаю те же данные, как если бы я никогда не добавлял две новые записи. Когда я его регистрирую, это выглядит так:
Array
(
[token] => xyz
[access_token] => abc
)
После добавления двух новых записей:
Array
(
[token] => xyz
[access_token] => abc
[new] => 'axy'
[time] => 1234
)
И после сохранения () и refresh ():
Array
(
[token] => xyz
[access_token] => abc
)
Модель выглядит следующим образом:
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Contracts\Encryption\DecryptException;
class UserData extends Model
{
protected $fillable = [
'user_id', 'app_data'
];
protected $casts = [
'user_id' => 'int',
'app_data' => 'array'
];
public function getAppDataAttribute($value)
{
try {
return decrypt($value);
}
catch (DecryptException $e) {
return $value;
}
}
public function setAppDataAttribute($value)
{
$this->attributes['app_data'] = encrypt($value);
}
}
Почему мои добавления в массив не сохраняются?
Редактировать: Странность продолжается
ЕслиЯ звоню:
UserData :: where ('id', $ userData-> id) -> update (['app_data' => $ encryptedData]);
Затем модель обновляетсяи не шифрует , ОДНАКО, когда я обновляю и регистрирую новое поле 'app_data', оно возвращается в виде строки JSON, а не в виде массива, как раньше. Мне нужно приводить / декодировать его в массив каждый раз, когда я хочу его использовать.