【发布时间】:2021-10-05 20:52:20
【问题描述】:
这里是我的用户工厂:
<?php
namespace Database\Factories;
use App\User;
use Faker\Generator as Faker;
use Faker\Factory as FakerFactory;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
$factory->define(User::class, function (Faker $faker) {
static $password;
return [
'firstname' => $this->faker->firstName(),
'name' => $this->faker->lastName,
'nickname' => $this->faker->userName,
'email' => $this->faker->unique()->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => Str::random(10),
];
});
这是我的用户模型的第一部分:
class User extends Authenticatable implements HasLocalePreference
{
use Notifiable;
protected $table = 'users';
protected $appends = ['avatar','targetLang','targetLangId','type', 'isAdmin'];
protected $casts = [
'preferences' => 'array',
];
protected $guarded= [];
protected $hidden = [
'password', 'remember_token','accessToken','refreshToken',
];
还有我称之为工厂的测试:
class MoveCourseItemTest extends DuskTestCase
{
/**
* A Dusk test to move card in other block.
*
* @return void
*/
public function testMoveCard() {
// Create Teacher User
$teacher = factory(User::class)->create([
'isTeacher' => 1,
'termsofuse_id' => 1,
'privacypolicy_id' => 1,
]);
最后我得到这个错误,只在暂存环境(不是在本地环境):
Illuminate\Database\QueryException: SQLSTATE[HY000]: 一般错误: 1364 字段 'firstname' 没有默认值(SQL:插入
users(name,password,remember_token,isTeacher,termsofuse_id,privacypolicy_id,updated_at,created_at) 价值观(Kenneth Altenwerth Jr.,koch.cooper@example.org, $2y$10$1B7LlTzM4iINkVI/82Pp6OHSUWBWaePPdDKMy1DRW2K02d8UYKc2S, r0WnPBrZGG, 1, 1, 1, 2021-07-29 21:12:54, 2021-07-29 21:12:54))
有人知道我怎么解决吗?谢谢!
【问题讨论】:
-
如果字段不可为空,则只需将
''传递给firstname为'firstname' => '' -
我会注意到插入调用使用的列
name, email, password, remember_token, isTeacher, termsofuse_id, privacypolicy_id, updated_at, created_at也不包括firstname或nickname(即使它们在您共享的工厂中),这可能表明您'已经在其他地方定义了另一个用户工厂并且存在冲突?您似乎还将 Laravel 8 样式use和namespace声明与旧样式全局变量混合在一起。你使用的是什么版本的 Laravel,如果你使用的是 L8,你使用的是旧的工厂适配器吗?
标签: php database laravel factory