PHP 7 和 Laravel 8 使用私有变量序列化模型
Posted
技术标签:
【中文标题】PHP 7 和 Laravel 8 使用私有变量序列化模型【英文标题】:PHP 7 and Laravel 8 serialize model with private variables 【发布时间】:2021-07-29 02:42:43 【问题描述】:我正在将一个项目从 php 5.4、Laravel 4.2 升级到 PHP 7.4、Laravel 8。
使用 PHP 5.4 和 Laravel 4.2,我会 serialize()
具有关系和私有变量的模型
存储在redis中。当用户完成更改后,我们存储到 DB 并从 redis 中删除。
对于 PHP 5.4 和 Laravel 4.2,使用 serialize()
效果很好。
对于 PHP 7.4 和 Laravel 8,使用 serialize()
不包括我的模型中的私有变量
序列化时。我需要将我的模型与所有加载的关系和私有变量一起存储在 redis 中
当用户与模型交互时。
如何让 PHP 7.4 和 Laravel 8 序列化我的模型,包括私有变量?
class MyParent extends Model
private $privatevalueone = 1;
private $privatevaluetwo = 2;
public function childeh()
return $this->hasOne('ChildEh');
public function childbee()
return $this->hasMany('ChildBee');
public function childsea()
return $this->hasMany('ChildSea');
// there are a total of 11 relations
public function calc()
// - does calculations that can change model properties in relations
// and properties in the parent model.
// - stores values needed while the model is cached using private variables,
// the private variables are only needed while cached and not needed when
// written to DB
/**
* With PHP 5.4, Laravel 4.2, using serialize preserved
* the entire model, including private variables in the model
*
* With PHP 7.4, Laravel 8, using serialize does not
* include the private variables in the model,
*/
public function cacheSet($key, $model)
Redis::set($key, serialize($model));
public function cacheGet($key)
return unserialize(Redis::get($key));
【问题讨论】:
php.net/manual/en/function.get-object-vars.php 也是积累私人会员的良好开端。还要检查 __serialize() 魔术方法php.net/manual/en/language.oop5.magic.php#object.serialize 【参考方案1】:感谢@nice_dev 的回复。 我的解决方案是将以下特征添加到我的模型中,它可以执行您所引用的操作:
\Illuminate\Queue\SerializesModels
【讨论】:
以上是关于PHP 7 和 Laravel 8 使用私有变量序列化模型的主要内容,如果未能解决你的问题,请参考以下文章
作曲家和 laravel 7 不适用于 php 8.1 [关闭]
PHP 致命错误:未捕获的错误:使用 Laravel 5.8 和 PHP 7.4 调用未定义函数 Whoops\Exception\xdebug_is_enabled()
Zend Opcache 不缓存所有文件(CentOS 6.7 + Nginx 1.8.1 + PHP 7 + Laravel 5.1)