OctoberCMS中的用户表继承

时间:2018-03-15 19:57:32

标签: octobercms octobercms-plugins

我有两个用户:老师和学生,每个人都有不同的属性。例如:学生有一节课,老师有很多课,等等 我想继承OctoberCMS Users插件,并添加两个具有这些附加属性的控制器(一个用于学生,另一个用于教师)。所以,我创建了两个扩展用户模型的模型。这两个模型使用相同的用户表,我为教师和学生添加了两个表,但我无法将它们与用户表链接。
这就是我所做的:

class Teacher extends User 
{
  public $hasOne=[
    'mobile'=>'??',
  ]
}

所以,我想在教师表中为每位老师添加一个移动字段和其他字段,我该怎么做?
请注意,我不想在users表中添加字段。我想要用户表中的共享列,教师表中的教师附加字段以及学生表中的学生附加字段。

3 个答案:

答案 0 :(得分:2)

嗯,这是我得到的解决方案:
1-将教师和学生的其他字段添加到用户表中 2-让教师和学生模型扩展用户模型
3-在保存之前,为每个模型添加一个功能以添加用户组(教师或学生) 4-在教师和学生的控制器上应用过滤器,仅列出他们的组。

这是完整的代码:

class UserAddFields extends Migration
{
public function up()
{
    if (Schema::hasColumn('users', 'mobile')) {
        return;
    }

    Schema::table('users', function($table)
    {
        $table->string('mobile', 100)->nullable();
        $table->integer('class_id', 100);
    });
}

}


class Teacher extends User
{
public $belongsToMany = [
    'groups' => [UserGroup::class, 'table' => 'users_groups', 'key' => 'user_id', 'otherKey' => 'user_group_id']
];

public function beforeCreate()
    {
            $this->groups=UserGroup::where('code','teachers')->first();
    }           
}

class Teachers extends Controller
{
public function listExtendQuery($query)
    {
            $query->whereHas('groups', function ($q){
                $q->where('code', '=', "teachers");
            });
    }
}

和学生一样。

答案 1 :(得分:1)

根据我的观点,你应该选择与你不同的流程。根据我的经验,我认为您必须为教师和学生制作两个单独的模型和控制器,并使用单独的表格。

之后,您必须在教师,学生和用户之间分配关系。 要了解关系,您可以参考Octobercms relations.

根据我的观点,应该按照以下方式给出关系:

在教师和学生模型中,

public $belongsTo = [
    'user'             => [ 'RainLab\User\Models\User' ],
];

Rainlab用户插件具有群组模型,因此您可以分配不同群组中的用户,例如“老师”和“学生”。

此外,如果您想添加类似模型的额外字段,您还可以使用User Plus插件User Plus plugin.

答案 2 :(得分:0)

我用这个视频来添加每个组的依赖 Extending the User plugin

它仅适用于一个组,但是当我尝试以相同的方式添加自定义字段时,出现此错误:

“方法:: __ toString()不得引发异常,捕获Illuminate \ Database \ Eloquent \ JsonEncodingException:错误编码模型...”