Php 在laravel中导入大量记录,每条记录具有多个关系
我有一个例子,用户上传一个包含大量行的文件(比如1000行)。每一行包含关于用户的信息 这些数据被转换成带有对象的PHP数组 例如 现在,我必须为每一行创建Php 在laravel中导入大量记录,每条记录具有多个关系,php,mysql,laravel,laravel-4,eloquent,Php,Mysql,Laravel,Laravel 4,Eloquent,我有一个例子,用户上传一个包含大量行的文件(比如1000行)。每一行包含关于用户的信息 这些数据被转换成带有对象的PHP数组 例如 现在,我必须为每一行创建 foreach ($usersArray as $user) { $createdUser = User::create(array('email' => $user['email'], 'pin' => $user['id_code'])); $profile = Userprofile::create(arr
foreach ($usersArray as $user) {
$createdUser = User::create(array('email' => $user['email'], 'pin' => $user['id_code']));
$profile = Userprofile::create(array('first_name' => $user['first_name'], 'last_name' =>$user['last_name']));
$createdUser->profile()->associate($profile);
$createdUser->save();
$usergroup->addMember($createdUser);
}
这意味着如果我有1000行,至少4000个查询,这显然太多了。有没有一种雄辩的方式可以更优雅地做到这一点
我尝试使用querybuilder,先插入所有配置文件,然后插入用户,但这不起作用,因为我不知道要检索哪些配置文件(first_name和last_name不是唯一字段),因此无法将配置文件id链接到我要创建的用户 我想你可以用这个来导入
但是,要导入多个关系,我认为除了使用associate()或sync()之外没有其他方法
我认为除了迭代和将概要文件与用户关联之外,没有其他方法。如果需要花费大量时间考虑使用队列,队列将在后台执行此任务。至于唯一的密钥,您可以自己生成一个。concat上传批次号用户id和其他一些唯一id和哈希。但是,eloquent已经有了一个唯一的id字段,您可以在保存概要文件模型后获得它。我想您的意思是“有没有办法更雄辩地完成此操作”;)更严重的是,如果您关心性能问题,那么在这种情况下可能需要避免使用雄辩的ORM。我在4.2中开发了一个应用程序,需要将大量数据从旧模式传输到新模式,PDO(或python)和Eloquent之间的速度差异令人震惊。
foreach ($usersArray as $user) {
$createdUser = User::create(array('email' => $user['email'], 'pin' => $user['id_code']));
$profile = Userprofile::create(array('first_name' => $user['first_name'], 'last_name' =>$user['last_name']));
$createdUser->profile()->associate($profile);
$createdUser->save();
$usergroup->addMember($createdUser);
}
$model_object = new YourModelHere();
//your model id here
$model_object->id = $sheet->id;
//your model id fields
$model_object->field_1 = (int)$sheet->field_1;
$model_object->field_2 = (int)$sheet->field_2;
//related id of models heres
$id_of_related_1 = (int) $sheet->id_of_related_1 ;
$id_of_related_2 = (int) $sheet->id_of_related_2;
//in your Model.php the relation i.e. hasMany or Belongs to must be declared first.
$model_object->relationToModelOne()->associate(RelatedModelOne::find($id_of_related_));
$model_object->relationToModelTwo()->associate(RelatedModelTwo::find($id_of_related_2));
$model_object->save();