yii2 中 amnah 生成的 users 表中的新字段

问题描述 投票:0回答:1

我正在使用 yii2 和 amnah 构建一个应用程序来管理用户,我想知道是否可以向 amnah 在数据库中创建的用户表添加新字段,例如用于存储照片或其他一些信息的字段

可以这样做吗?

php mysql yii2
1个回答
0
投票

有可能吗?是的,是的。

Yii2 基于

yii\db\ActiveRecord
的模型获取其属性列表 直接来自他们的数据库表。因此添加新字段就像向数据库表添加新列一样简单。您可以通过创建迁移并在其中添加新列来做到这一点。

如果您不需要为新字段添加属性标签或验证规则,这就足够了。如果您想添加,您还需要扩展现有模型并配置 amnah 的模块和用户组件以使用您的扩展模型而不是它自己的模型。

扩展现有模型:

<?php

namespace app\models;

use amnah\yii2\user\models\User as BaseUser;

class User extends BaseUser
{
    public function rules(): array
    {
        $rules = parent::rules();
        // This is just an example, set up validation rules as you need them
        $rules[] = ['my_new_field', 'required'];
        $rules[] = ['my_new_field', 'string', 'min' => 3];
        return $rules;
    }

    public function attributeLabels(): array
    {
        $labels = parent::attributeLabels();
        // This is just an example, set up labels as you need them
        $labels['my_new_field'] = 'My fancy new field';
        return $labels;
    }
}

编辑您的配置文件以更改模块的配置:

'components' => [
    'user' => [
        'class' => 'amnah\yii2\user\components\User',
        // set up component to use our extended model as identity class
        'identityClass' => 'app\models\User',
    ],
],
'modules' => [
    'user' => [
        'class' => 'amnah\yii2\user\Module',
        'modelClasses'  => [
            // set up amnah's user module to use our extended model class
            'User' => 'app\models\User',
        ],
    ],
],

应该这样做吗?不,不应该

数据库表是由第 3 方包创建的,因此应由该包管理它们。该软件包的某些未来更新可能会更改其数据库表的结构。如果您修改这些表的结构,则可能会导致您的更改与未来包更新中引入的更改之间存在一些冲突。相反,您可以创建自己的数据库表,与 amnah 包中的表具有 1:1 关系,并在其中存储您自己的数据。

© www.soinside.com 2019 - 2024. All rights reserved.