laravel 8中扩展模型的工厂

Posted

技术标签:

【中文标题】laravel 8中扩展模型的工厂【英文标题】:Factory for extended Model in laravel 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"
        ];
    


【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于laravel 8中扩展模型的工厂的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 基于类的模型工厂

Laravel播种工厂但扩展它

Laravel 8 工厂类在创建工厂时不会覆盖参数

Laravel 8 工厂的多重关系

是否可以在 Laravel 项目中使用自己工厂中的模型?

Laravel 模型工厂没有连接到数据库