Laravel 5.4 如何在播种机中使用 modelfactory

How to use modelfactory in seeder in Laravel 5.4

我在 NewsTableSeeder 中使用模型工厂,但在输入 db:seed 时出现此错误。

我想知道为什么我不能在我的播种器中使用 create()。

这是我的新闻模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;


class News extends Model
{
    protected $table = 'news';
    protected $primaryKey = 'id';

    public function home_news_lists() {
        return $this->select('id', 'news_title', 'news_update')
                    ->orderBy('news_update', 'DESC')
                    ->limit(5)
                    ->get();
    }

    public function lists() {
        return News::all();
    }
}

模型工厂:

$factory->define(App\Models\News::class, function (Faker\Generator $faker) 
{
    static $password;
    $faker = $faker->create('zh_TW');

    return [
        'news_title'     => $faker->sentence(),
        'news_content'   => $faker->paragraph(),
        'news_author'    => $faker->name(),
        'news_pageviews' => $faker->numberBetween(1, 100),
        'news_file'      => ' ',
        'news_img'       => $faker->imageUrl($width, $height, 'business'),
        'created_at'     => $faker->dateTimeBetween('2012', 'now', 'zh_TW'),
        'updated_at'     => $faker->dateTimeBetween('2015', 'now', 'zh_TW')
    ];
});

新闻表格播种器:

<?php

use Illuminate\Database\Seeder;

class NewsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Models\News::class, 50)->create();
    }
}

$faker = $faker->创建('zh_TW');

错误信息说这个代码是错误的。

您使用此代码的目的是什么?

如果不确切地看到您遇到的错误,我不能百分百确定,但我相信 $faker 对象上没有 create() 方法。

我相信你的意思是:

$factory->define(App\Models\News::class, function (Faker\Generator $faker) 
{
    static $password;
    $faker = \Faker\Factory::create('zh_TW');  // change to this

    return [
        ...
    ];
}

我只想创建一个新的 faker 生成器 (\Faker\Generator),它从调用 \Faker\Factory::create($locale) 中返回并使用它。否则,我相信您的下一个最佳选择是在 Laravel 实例化传递给回调的 \Faker\Generator $faker 对象的任何地方覆盖,但如果 Laravel 没有提供干净的方法,那可能会变得很麻烦去做。

create() 方法是对 \Faker\Factory 方法的静态调用。它接受语言环境作为参数并使用 en_US 作为默认语言环境。