在 Laravel 5.2 的模型构造函数中访问数据库值

Accessing a database value in a models constructor in Laravel 5.2

我试图在 Laravel 5.2 的模型构造函数中获取、转换和保存一个值。原因是它在数据库中保存为十六进制,我需要经常将它转换为二进制,并且想做一次并将结果保存在 class 属性中。但我似乎无法在构造函数中从 $this 中获取值。

这是我正在使用的内容的摘录,guid 是我 table 中的一个字段。

class Person extends Model {
    private $bGuid = null;

    public function __construct(array $attributes = []) {
            parent::__construct($attributes);
            $this->ad = Adldap::getProvider('default');
            $this->bGuid = hex2bin($this->guid);
        }

    public function getName(){
        $query = $this->ad->search()->select('cn')->findBy('objectGUID', $this->bGuid);
        return $query['attributes']['cn'][0];
    }   
}

$this->ad 属性按预期执行,但 $this->bGuid 没有。一些调试显示在构造函数中引用 $this->guid returns null。而如果在 getName() 方法中直接引用就可以了。

我的中间解决方案是创建一个新函数并调用$this->getbGuid(),这让我对DRY-ness更加满意,但每次调用时仍然需要转换它。

如果有人能告诉我出了什么问题,我将不胜感激,这样我就可以改进代码:)

尝试覆盖模型中的另一个方法:newFromBuilder()。 这是从数据库中检索数据后执行的那个,而不是 __construct() 那个:

class Person extends Model {
    private $bGuid = null;

    public function newFromBuilder($attributes = [], $connection = null)
    {
        $model = parent::newFromBuilder($attributes, $connection);

        $model->bGuid = hex2bin($model->guid);

        return $model;
    }
}

请注意,在重写的方法中,您将对象引用为 $model(而不是 $this),并且最后必须 return $model 对象。