利用 model 操作 把 save 放在一个循环内,批量生成数据然后 save 数据,但是不管循环多少次每次都只 save 成功了一个

public function getUser(User $user)
{
for ($i = 1; $i < 100; $i++) {
$name = 'u_' . rand(1, 1000);
$email = '124698' . rand(1000, 9999) . '@qq.com';
if (!$user->where('name', '=', $name)->get()->isEmpty()) {
print('ss');
continue;
}
if(!$user->where('email','=', $email)->get()->isEmpty()){
print('ss');
continue;
}
$user->name = $name;
$user->password = md5($name);
$user->email = $email;
$user->save();
print("执行了$i 次");
}
return 'ok';
}

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

因为你操作的都是同一个对象呀:这时候不应该使用注入了


public function getUser()
{
    for ($i = 1; $i < 100; $i++) {
        $user = new User();
        $name = 'u_' . rand(1, 1000);
        $email = '124698' . rand(1000, 9999) . '@qq.com';

        if (!$user->where('name', '=', $name)->get()->isEmpty()) {
            print('ss');
            continue;
        }

        if(!$user->where('email','=', $email)->get()->isEmpty()){
            print('ss');
            continue;
        }

        $user->name = $name;
        $user->password = md5($name);
        $user->email = $email;
        $user->save();
        print("执行了$i 次");
    }
    return 'ok';
}

这样自己应该就可以了。
注意一下代码格式。

6年前 评论

简单来说你操作的都是数据库里面同一个id的记录

6年前 评论

@施国鹏 十分感谢,我可以不可以这么理解,new 一个对象出来,或者注入的对象只能代表表中的一条数据,存在即修改。不存在即新建。

6年前 评论

注入和你自己手动new都是一样的,
你后面的理解可能有点问题。
你这个代码永远是新建,而不是修改。如果想要你的那种说法,代码改成这样

$user = new User();
// 你的想法, 我修改成了用 `->first()`来查询记录是否存在。如果查找到记录, 则赋值$user为查找出来的模型,
if (!$user->where('name', '=', $name)->first()) {
          $user = $user->where('name', '=', $name)->first();
 }

if(!$user->where('email','=', $email)->first()){
   $user = ->where('email','=', $email)->first();
}

// 赋值
$user->attr = $value;
$user->save();

上面的操作,laravel提供了更加便利的方法(省略无关代码)


(new User())->updateOrCreate(
   // 第一个数组为检索数组,就是要查找的属性,你的则为`name`和`email`
    ['name' => $name, 'email' => $email],
    // 第二个数组为不需要检索,但是需要修改的数据
    ['password ' => $passwor]
);
// !!! 不需要调用`save`, `laravel`已经持久化了。
6年前 评论

@施国鹏 非常感谢,顺便提一下,updateOrCreate 需要配合白名单不然会报错就是。

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!