我有两个用户:老师和学生,每个人都有不同的属性。例如:学生有一节课,老师有很多课,等等
我想继承OctoberCMS Users插件,并添加两个具有这些附加属性的控制器(一个用于学生,另一个用于教师)。所以,我创建了两个扩展用户模型的模型。这两个模型使用相同的用户表,我为教师和学生添加了两个表,但我无法将它们与用户表链接。
这就是我所做的:
class Teacher extends User
{
public $hasOne=[
'mobile'=>'??',
]
}
所以,我想在教师表中为每位老师添加一个移动字段和其他字段,我该怎么做?
请注意,我不想在users表中添加字段。我想要用户表中的共享列,教师表中的教师附加字段以及学生表中的学生附加字段。
答案 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:错误编码模型...”