问题:从带有工厂的表中随机生成数据

Posted

技术标签:

【中文标题】问题:从带有工厂的表中随机生成数据【英文标题】:Problem : randomly generate data from a table with a factory 【发布时间】:2021-11-25 20:28:17 【问题描述】:

我想从我的garage 表中获取一个已经存在的随机 id,所以我遇到了问题。

<?php

namespace Database\Factories;

use App\Models\Car;
use App\Models\Garage;
use Illuminate\Database\Eloquent\Factories\Factory;

class CarFactory extends Factory

    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Car::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    
        return [
            'name' => $this->faker->name(),
            'release_year' => $this->faker->year(),
            'garage_id' => Garage::inRandomOrder('id')->first('id'),
            'created_at' => now()
        ];
    

问题是:

不推荐使用 PHP:从 fakerphp/faker 1.14 开始:访问 属性“name”已弃用,请改用“name()”。在 /data/www-local/web/lara_sites/swan-formation-laravel/vendor/symfony/deprecation-contracts/function.php 在第 25 行 PHP 已弃用:因为 fakerphp/faker 1.14:不推荐访问属性“year”,请改用“year()”。在 /data/www-local/web/lara_sites/swan-formation-laravel/vendor/symfony/deprecation-contracts/function.php 在第 25 行 Illuminate\Database\QueryException 与消息 'SQLSTATE [23000]:违反完整性约束:1048 列 'garage_id' 不能为空 (SQL: 插入cars (name, release_yeargarage_idcreated_atupdated_at) 值(Alf 拜耳, 1994, ?, 2021-10-05 16:21:19, 2021-10-05 16:21:19))'

【问题讨论】:

【参考方案1】:

你可以试试这个

'garage_id' => $this->faker->randomElement(Garage::query()->get('id')),

【讨论】:

总是同样的问题 检查一下你的车库桌子上是否有任何数据?【参考方案2】:

inRandomOrder 方法可用于对查询结果进行随机排序。 它没有参数,你可以像这样使用它:

 'garage_id' => Garage::inRandomOrder()->first()->id,

你应该确保你的车库桌子不是空的。

【讨论】:

我做了更改,但我仍然有同样的问题,我还检查了我的车库桌子不是空的

以上是关于问题:从带有工厂的表中随机生成数据的主要内容,如果未能解决你的问题,请参考以下文章

将随机数据插入到 MySql 中的表中

如何从 PostgreSQL 中的另一个表中更新具有随机 id 的表

从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)

使用sql语句在mysql的表中随机获取数据

从 SQL Server 表中选择 n 个随机行

随机化表格单元格