【问题标题】:Laravel Bulk Insert To Another Table From Selected Multiple RowsLaravel 从选定的多行批量插入到另一个表
【发布时间】:2020-05-22 09:36:58
【问题描述】:

我希望我可以将多行从特定表复制到另一个表。但问题是,它无法复制密码字段数据和 spatie assignRole()。然而,电子邮件、姓名、用户名等所有字段都可以正常工作。

public function approveMultiple(Request $request) {
        $get_ids = $request->ids;
        $ids = explode(',', $get_ids);

        $users = \App\Applicant::whereIn('id', $ids);
        $users->update(['status' => 'Approved']); 

        $find_selected = \App\Applicant::whereIn('id', $ids)->get();
        $find_selected->makeHidden(['status', 'id']);
        $find_selected->makeVisible(['password']);
        $new_users = $find_selected->toArray();
        $users = \App\User::insert($new_users);

        //problem still lays here
        //$users->assignRole('Applicant');
        //$users->save();

        return response()->json(['success' => "Selected User(s) successfully approved."]);
    }

尝试这种方法但只插入一条记录

public function approveMultiple(Request $request) {
        $get_ids = $request->ids;
        $ids = explode(',', $get_ids);

        //$users = \App\Applicant::whereIn('id', $ids);
        //$users->update(['status' => 'Approved']); 

        //$find_selected = \App\Applicant::whereIn('id', $ids)->get();
        $find_selected = \App\Applicant::whereIn('id', $ids)->firstOrFail();
        $find_selected->makeHidden(['status', 'id']);
        $find_selected->makeVisible(['password']);
        $new_users = $find_selected->toArray();
        //$users = \App\User::insert($new_users);


        $users = \App\User::create([
            'name' => $find_selected->name,
            'username' => $find_selected->username,
            'gender' => $find_selected->gender,
            'email' => $find_selected->email,
            'phone' => $find_selected->phone,
            'password' => $find_selected->password,
            'created_at' => $find_selected->created_at,
            'updated_at' => $find_selected->updated_at,
        ]);

        //problem lays here
        $users->assignRole('Applicant');
        $users->save();

        return response()->json(['success' => "Selected User(s) successfully approved."]);
    }

【问题讨论】:

    标签: laravel laravel-5 eloquent


    【解决方案1】:

    关于密码字段,您需要使用如下功能使其可见:makeVisible

    例如:

    $users->makeVisible('password')->toArray();
    

    编辑 1:

    关于assignRole你必须在调用save()方法后分配角色

    例如:

    $users->password = $find_selected->password;
    $users->save();
    $users->assignRole('Applicant');
    

    编辑 2:

    public function approveMultiple(Request $request) {
            $get_ids = $request->ids;
            $ids = explode(',', $get_ids);
    
            //$users = \App\Applicant::whereIn('id', $ids);
            //$users->update(['status' => 'Approved']); 
    
            $find_selected = \App\Applicant::whereIn('id', $ids)->get();
            //$find_selected = \App\Applicant::whereIn('id', $ids)->firstOrFail();
            $find_selected->makeHidden(['status', 'id']);
            $find_selected->makeVisible(['password']);
            $new_users = $find_selected->toArray();
            //$users = \App\User::insert($new_users);
    
            foreach($find_selected as $new_users){
               $user = \App\User::create($new_users);
               $user->assignRole('Applicant');
            }
    
            return response()->json(['success' => "Selected User(s) successfully approved."]);
        }
    

    【讨论】:

    • 在 bool 上调用成员函数 assignRole()
    • @SeadLab 能否请您制作代码的 pastebin.com 或更新问题
    • Model::insert() 在某些情况下会返回一个布尔值。你为什么不使用标准的Model::create([array $data])。这将返回已创建用户的对象,然后您可以对其运行 assignRole。
    • 我是这样做的,$users = \App\User::create($new_users);,是的,assignRole() 可以工作,但其他字段根本不工作
    • @SeadLab 其他字段像什么?
    【解决方案2】:

    我认为问题出在这一行:

    $users = \App\User::insert($new_users);
    

    insert 方法返回一个布尔值,指示插入操作是否成功... 所以你 $users 变量将持有一个布尔值...... 和

    $users->assignRole('Applicant');
     $users->password = $find_selected->password;
    

    不会工作

    你可以使用:

    $find_selected->makeVisible(['password']);
    
    foreach($find_selected as $user)
    {
    $newUser= new User();
    $newUser->password = $user->password;
    $newUser->save();
    $newUser->assignRole('Applicant');
    }
    

    【讨论】:

    • $newUser->save();请写 $newUser->refresh();然后尝试...
    • 我认为你错了。 $newUser->save();。参考$newUser 在哪里?我已经更新了代码,请检查!
    • 在 $users = \App\User::insert($new_users) 之后尝试 dd($users);它是布尔值
    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多