实例化 faker 类就只是为了使用 randomElement () 方法么?那为什么不直接使用 array_random () 函数?

实例化faker类就只是为了使用randomElement()方法么?那为什么不直接使用array_random()函数?
同样都是从数组中随机取出一个键值吧?难道randomElement()还有什么其他好处?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
  • 表面上,二者的作用一致,都是从一个数组中随机取元素,但:
    • array_random()实际上是借助了PHP原生函数 array_rand, 它产生的是伪随机数。
    • randomElement()借助了 mt_rand,它产生的是一个质量更好,速度更快的随机数。
  • 而且,用在这里等于是传授了获取faker实例的另一种方法, faker实例不仅仅可以在factory中通过依赖注入的方式实现,而且还可以通过app()这个函数来获取。
5年前 评论
讨论数量: 4
  • 表面上,二者的作用一致,都是从一个数组中随机取元素,但:
    • array_random()实际上是借助了PHP原生函数 array_rand, 它产生的是伪随机数。
    • randomElement()借助了 mt_rand,它产生的是一个质量更好,速度更快的随机数。
  • 而且,用在这里等于是传授了获取faker实例的另一种方法, faker实例不仅仅可以在factory中通过依赖注入的方式实现,而且还可以通过app()这个函数来获取。
5年前 评论
  • 表面上,二者的作用一致,都是从一个数组中随机取元素,但:
    • array_random()实际上是借助了PHP原生函数 array_rand, 它产生的是伪随机数。
    • randomElement()借助了 mt_rand,它产生的是一个质量更好,速度更快的随机数。
  • 而且,用在这里等于是传授了获取faker实例的另一种方法, faker实例不仅仅可以在factory中通过依赖注入的方式实现,而且还可以通过app()这个函数来获取。
5年前 评论

@hustnzj 老哥,蛮有水平的啊

5年前 评论

分享一个简洁的写法

         $topics = factory(Topic::class)
                        ->times(100)
                        ->make()
                        ->each(function ($topic, $index) {

                            // $topic->user_id = $faker->randomElement($user_ids);
                            $topic->user_id = User::all()->random()->id;

                            // $topic->category_id = $faker->randomElement($category_ids);
                            $topic->category_id = Category::all()->random()->id;
                        });

        // 将数据集合转换为数组,并插入到数据库中
        Topic::insert($topics->toArray());
5年前 评论

@daxiaobuzhaodiao 这样写是不是相当于执行了200次sql查询。。。

5年前 评论

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