这里是我的用户工厂:
<?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
) 值(Kenneth Altenwerth Jr.,[email protected], $2y$10$1B7LlTzM4iINkVI/82Pp6OHSUWBWaePPdDKMy1DRW2K02d8UYKc2S, r0WnPBrZGG, 1, 1, 1, 2021-07-29 21:12:54, 2021-07-29 21:12:54)))created_at
有人知道我怎么解决吗?谢谢!
让它在你的迁移中可以为空:
$table->string('name')->nullable();
作为附加说明,如果您为模型编写构造函数,请确保将
$attributes
数组传递给父构造函数,否则所有属性都不会传递给模型create
方法。
例子
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
// ...
}
在我看来,您的表中没有名字列。正如其他人所说,创建它并使其默认为可空。