7

我正在尝试查找一个表以查看是否存在名为“name”的列,如果存在则返回值,如果不使用空值创建该行,我看到 firstOrCreate 但我无法弄清楚如何在我的一生中使用它.

这是我目前拥有的,有人可以帮忙吗?

 class Settings extends Eloquent
        {
            protected $table = 'settings';
            protected $primaryKey = 'name';

            public static function get($settingName)
                {
                    return self::firstOrCreate(array('name' => $settingName));
//                    return self::select(array('value'))->where('name', '=', $settingName)->first()->value;
                }
        }
4

1 回答 1

10

create() 方法进行批量赋值,这是一个很大的安全问题,所以 Laravel 有一个保护措施。在内部它已保护 = ['*'],因此您的所有列都将受到保护,不会被批量分配。你有一些选择:

设置模型的可填充列:

class User extends Eloquent {

    protected $fillable = array('first_name', 'last_name', 'email');

}

或者只设置你想要保护的那些:

class User extends Eloquent {

    protected $guarded = array('password');

}

您还可以自行承担风险:

class User extends Eloquent {

    protected $guarded = array();

}

一切都将无人看管。

看看文档: http: //laravel.com/docs/eloquent#mass-assignment

你也可以使用你的 Facade 来调用它:

 class Settings extends Eloquent
 {
        protected $table = 'settings';
        protected $primaryKey = 'name';

        public static function get($settingName)
        {
            return Settings::firstOrCreate(array('name' => $settingName));
        }
 }
于 2013-10-25T14:34:22.127 回答