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;
}
我有一个带有布尔字段的 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;
}