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