在Laravel模型中创建自定义变量/属性


Creating custom variables/attributes in Laravel Model

我正试图在Laravel模型内部创建一个自定义属性。该属性对于所有Model实例都是相同的(静态?)。目标是在创建模型实例时使用此属性填充选择下拉列表。示例:

class User extends Model
{
    protected $table = 'users';
    protected $guarded = [ 'id' ];
    public $timestamps = true;
    protected $genders = ['male'=>'Male', 'female'=>'Female'];  //custom
    public static function getGenderOptions() {
        return $genders;
    }
}

然后在构建表单时,我可以做一些类似的事情:

// UserController.php
$data['select_options'] = User::getGenderOptions();
return view('user.create', $data);
// create.blade.php
{!! Form::select( 'gender', $select_options ) !!} 

这导致我得到错误:

Undefined variable: genders

我正在努力防止所有的选择选项扰乱我的控制器,因为还有一些其他选项我没有包括在内。

谢谢。

修改您的protected $genders元素并使其为public+static。那么你就可以直接访问它了:User::$genders

但是。。。我个人的决定是将常量移到配置文件或某种帮助程序中。

我想应该是

public function getGenderOptions() {
    return $this->genders;
}

或者简单地将$genders声明为静态变量并使用return self::$genders

检查文档-变量范围和静态关键字