Laravel 5.1 模型 returns 中的书 属性 在模型 class 内部访问时为空数组

Laravel 5.1 bool property in model returns empty array when accesed inside model class

我有一个带有布尔字段的 eloquent 模型。数据库中的列是 tinyint(1),值正确存储为 1。如果我在 class 之外的任何给定上下文中访问此值,我会得到正确的值:

$myModel = MyModel::first();
var_dump($myModel->visible); //outputs 1

当我在模型中的方法中访问它时 class 不过....

class MyModel {
    public function isVisible(){
        var_dump($this->visible); 
        // return $this->visible && $this->approved; // another true value
    }
}

//on tinker
>> $myModel->isVisible();
array(0) {
}
>>

我知道这听起来很疯狂,但我已经用了两个小时了,还是没法让它工作。我错过了什么?

Laravel 的模型 class 已经有一个 protected $visible 属性。您可能已经猜到了,它是一个数组。当从 class 中访问时,它可以访问此 protected 属性,因此它将 return 数组。当在 class 之外访问时,它使用 PHP 的神奇 __get 方法,因此它是 returning 列的值。

如果可能,您可以重命名您的列以防止任何潜在的未来冲突。否则,您可以通过使用 getAttribute 方法访问模型的列值而不是像这样访问模型的 属性 来更改 isVisible() 方法:

public function isVisible(){
    return $this->getAttribute('visible') && $this->approved;
}