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 用扩展模型制造工厂的做法实际上是正确的。只需使用扩展模型制作一个工厂,就像您使用常规模型一样,它应该可以工作。但是,在这种情况下,title
和 content
的 faker
函数出现错误,这可能是错误中显示的未将它们添加到插入语句中的原因。 Faker 已经更新了他们的语法,代码行应该是:
//note the parantheses ()
"title" => $this->faker->name(),
"content" => $this->faker->paragraph(),
【讨论】:
以上是关于laravel 8中扩展模型的工厂的主要内容,如果未能解决你的问题,请参考以下文章