模型中的Laravel 5.1 bool属性在模型类中加入时返回空数组

时间:2015-12-08 23:02:32

标签: laravel model this laravel-5.1 typing

我有一个带有布尔字段的雄辩模型。数据库中的列为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) {
}
>>

我知道这听起来很疯狂,但我已经在这里呆了两个小时而无法使它发挥作用。我错过了什么?

1 个答案:

答案 0 :(得分:5)

Laravel的Model类已经有protected $visible属性。你可能已经猜到了,它是一个数组。从类中访问时,它可以访问此protected属性,因此它将返回该数组。在课外访问时,它使用PHP的魔术__get方法,因此它会返回列的值。

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

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