我有一个用户表,在类型列中有两种类型'student'或'faculty'。 我想从教师和学生的用户表中创建两个不同的表...
我想为教师和学生创建两个模型,但我不能提前考虑如何为这些模型填充表格。
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('name');
$table->string('identif')->unique();
$table->string('type');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
//Add Primary Key
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
} }
答案 0 :(得分:1)
最简单的方法是运行原始查询并将数据从users表复制到其他2个表,如果您正在使用MySQL,那么以下内容可能会起作用:
DB::statement("INSERT INTO students (name, identif, email, password) SELECT (name, identif, email, password) FROM users WHERE type = ?", array('student'));
其他数据库应该提供类似的功能。
如果您不需要为这些记录运行Eloquent模型逻辑,那么上面就可以了。否则只需获取用户对象,创建新的Student或Faculty对象并保存新对象:
Users::all()->map(function($user) {
if ($user->type == 'student') {
Student::create($user->toArray());
} else {
Faculty::create($user->toArray());
}
});
如果您希望每次创建Users对象时都创建一个新的Faculty对象,您可以使用Eloquent模型事件:
//User.php
protected static function boot() {
parent::boot();
static::created(function($user) {
if ($user->type == 'student') {
Student::create($user->toArray());
} else {
Faculty::create($user->toArray());
}
});
}