我有一个带有布尔字段的雄辩模型。数据库中的列为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) {
}
>>
我知道这听起来很疯狂,但我已经在这里呆了两个小时而无法使它发挥作用。我错过了什么?
答案 0 :(得分:5)
Laravel的Model类已经有protected $visible
属性。你可能已经猜到了,它是一个数组。从类中访问时,它可以访问此protected
属性,因此它将返回该数组。在课外访问时,它使用PHP的魔术__get
方法,因此它会返回列的值。
如果可能,您可以重命名列,以防止任何潜在的未来冲突。否则,您可以使用isVisible()
方法更改getAttribute
方法,以访问模型的列值,而不是像这样访问模型的属性:
public function isVisible(){
return $this->getAttribute('visible') && $this->approved;
}