在 Laravel 8 中使用工厂时字段名称没有默认值错误

问题描述 投票:0回答:3

这里是我的用户工厂:

<?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
,
email
,
password
,
remember_token
,
isTeacher
,
termsofuse_id
,
privacypolicy_id
,
updated_at
,
created_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)))

有人知道我怎么解决吗?谢谢!

php database laravel factory
3个回答
1
投票

让它在你的迁移中可以为空:

$table->string('name')->nullable();

0
投票

作为附加说明,如果您为模型编写构造函数,请确保将

$attributes
数组传递给父构造函数,否则所有属性都不会传递给模型
create
方法。

例子

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);
    // ...
}

-1
投票

在我看来,您的表中没有名字列。正如其他人所说,创建它并使其默认为可空。

© www.soinside.com 2019 - 2024. All rights reserved.