Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在laravel中导入大量记录,每条记录具有多个关系_Php_Mysql_Laravel_Laravel 4_Eloquent - Fatal编程技术网

Php 在laravel中导入大量记录,每条记录具有多个关系

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

我有一个例子,用户上传一个包含大量行的文件(比如1000行)。每一行包含关于用户的信息

这些数据被转换成带有对象的PHP数组 例如

现在,我必须为每一行创建

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();