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

时间:2017-03-01 03:05:39

标签: php laravel laravel-5.4

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

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

My error message image.

这是我的新闻模式:

<?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')
    ];
});

NewsTableSeeder:

<?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();
    }
}

2 个答案:

答案 0 :(得分:0)

$ faker = $ faker-&gt;创建(&#39; zh_TW&#39;);

错误消息表示此代码错误。

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

答案 1 :(得分:0)

我无法在没有看到错误的情况下告知100%,但我相信create()对象上没有$faker方法。

我相信你的意思是:

$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作为默认语言环境。