【问题标题】:Factory for extended Model in laravel 8laravel 8中扩展模型的工厂
【发布时间】:2021-01-26 22:54:46
【问题描述】:

我在 laravel 8 上遇到了一个问题,我创建了:

  • 一个名为CRUDModel 的类扩展Illuminate\Database\Eloquent\Model
  • 一个名为Stuff 的模型扩展了CRUDModel
  • 一个叫StuffFactory的工厂

当我打电话给Stuff::factory()->count(60)->create(); 时,我收到了这个错误:

SQLSTATE[HY000]: General error: 1364 Field 'title' doesn't have a default value (SQL: insert into `stuffs` (`updated_at`, `created_at`) values (2020-10-12 15:28:06, 2020-10-12 15:28:06))

我猜这是因为 Stuff 没有直接扩展 Model 但我不确定。 这是我的课:

<?php
namespace App\Crudite\Model;

use Illuminate\Database\Eloquent\Model;
use App\Crudite\Model\CRUDIntel;

class CRUDModel extends Model
{
    use CRUDIntel;

    ...
    
}

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Crudite\Model\CRUDModel;

class Stuff extends CRUDModel
{
    use HasFactory;
    ...
}
<?php

namespace Database\Factories;

use App\Models\Stuff;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Factories\Factory;

class StuffFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Stuff::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            "title" => $this->faker->name,
            "content" => $this->faker->paragraph,
            "thumbnail" => "https://placekitten.com/1200/300"
        ];
    }
}

【问题讨论】:

    标签: php laravel factory extends laravel-8


    【解决方案1】:

    对于可能有同样问题的其他人,@Kermito 用扩展模型制造工厂的做法实际上是正确的。只需使用扩展模型制作一个工厂,就像您使用常规模型一样,它应该可以工作。但是,在这种情况下,titlecontentfaker 函数出现错误,这可能是错误中显示的未将它们添加到插入语句中的原因。 Faker 已经更新了他们的语法,代码行应该是:

    //note the parantheses ()
     "title" => $this->faker->name(),
     "content" => $this->faker->paragraph(),
    

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 2021-01-04
      • 2021-11-26
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2018-06-13
      相关资源
      最近更新 更多