我有一个带有布尔字段的雄辩模型.数据库中的列是a tinyint(1)
,值正确存储为1
.如果我在类之外的任何给定上下文中访问此值,我将获得正确的值:
$myModel = MyModel::first(); var_dump($myModel->visible); //outputs 1
当我在模型类中的方法内访问它时虽然....
class MyModel { public function isVisible(){ var_dump($this->visible); // return $this->visible && $this->approved; // another true value } } //on tinker >> $myModel->isVisible(); array(0) { } >>
我知道这听起来很疯狂,但我已经在这里呆了两个小时而且无法使它发挥作用.我错过了什么?
Laravel的Model类已经有了一个protected $visible
属性.你可能已经猜到了,这是一个数组.从类中访问时,它可以访问此protected
属性,因此它将返回该数组.在类外部访问时,它使用PHP的魔术__get
方法,因此它返回列的值.
如果可能,您可以重命名列以防止任何潜在的未来冲突.否则,您可以isVisible()
使用该getAttribute
方法更改方法以访问模型的列值,而不是像这样访问模型的属性:
public function isVisible(){ return $this->getAttribute('visible') && $this->approved; }