发现一个小问题:pgsql 上使用 User::first () 和 User::find (1) 的结果居然不一致
在本地测试时,二者是完全一致的。不过在heroku上,二者居然不同。
从上面的SQL语句也可以看出来,二者取的记录不同。这就表明了在heroku/pgsql上,User表并不是以id升序排列的。为什么会这样呢?
从UsersTableSeeder的run方法中和多次测试结果可以看出:
- 直接使用教程中的User::insert(array)这种方式,不管是什么方法批量创建100个用户和获取第一个用户,都会导致在heroku上User表id=1的记录不是第一条记录。
- 而如果将创建用户的方式改为:
factory(User::class, 100)->create()
,则不会有此问题。但是这样效率偏低(插入N次),而且会激活model中的creating event,导致不必要的active token赋值。public function run() { //factory(User::class, 100)->create(); $users = factory(User::class, 100)->make(); //$users = factory(User::class)->times(100)->make(); User::insert($users->makeVisible(['password', 'remember_token'])->toArray()); //$user = User::find(1); $user = User::first(); $user->name = '王晓'; $user->email = '111111@qq.com'; $user->is_admin = true; $user->activated = true; $user->save(); }
感觉就是pgsql和mysql的一点小差异了。其实意义也不大,这里写出来这是提醒自己不要忘记。。
推荐文章: