如何在 laravel 的配置文件工厂中提供唯一的 user_id

Posted

技术标签:

【中文标题】如何在 laravel 的配置文件工厂中提供唯一的 user_id【英文标题】:How to provide unique user_id in profile factory in laravel 【发布时间】:2021-03-03 02:53:11 【问题描述】:

自从这个“新”更新出现在 laravel (laravel 8) 中,我在工厂中苦苦挣扎。我需要有关如何将用户模型中的唯一 ID 提供给配置文件工厂中的 user_id 列的帮助。在我的用户模型中,我与个人资料有关系:

public function profile()

    return $this->hasOne(Profile::class);

在配置文件模型中:

public function user()

    return $this->belongsTo(User::class);

现在我必须向配置文件工厂提供数据:

 return [
        'user_id' => ,
        'image' => 'image',
        'bio' => $this->faker->sentence,
...

【问题讨论】:

如何使用$this->faker->unique()->randomDigitNotNull; 不能使用随机数字,因为当 2 个用户具有相同 ID 时可能会导致错误 :) 它是一个外国 ID,必须是唯一的。我想知道当用户是用工厂制作时是否有办法制作个人资料:) 【参考方案1】:

如果您在已经有对应的User 时只创建Profile,则可以将user_id 排除在Profile 工厂之外,然后use the magic methods 同时创建两者。

User::factory()->hasProfiles(1)->create();

这将自动创建一个配置文件来匹配用户。


或者,如果您确实需要在创建用户之前创建配置文件,您可以像这样定义user_id in your factory,User 将由 Profile 创建。

return [
    'user_id' => User::factory(),
    'image' => 'image',
    'bio' => $this->faker->sentence,
];

【讨论】:

我更喜欢第一种方式。那么,我只需要在调用工厂创建用户后在 DatabaseSeeder 中调用 User::factory()....? 目前,我有这些工厂调用:prnt.sc/vmeigb ***.com/a/70273977/14344959 看这里我希望这个对其他人有所帮助

以上是关于如何在 laravel 的配置文件工厂中提供唯一的 user_id的主要内容,如果未能解决你的问题,请参考以下文章

laravel 设计思想简单总结

laraver框架学习------工厂模型填充测试数据

Laravel的工厂模型关系

Laravel 8 工厂的多重关系

通过工厂实现解耦

如何在mysql(laravel)中使varchar可为空且唯一