在 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
对象。
我试图在 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
对象。