Php laravel工厂插入外键
大家好,想帮忙的人 我正在尝试创建工厂文件来设定数据库的种子,我有一个问题:如何从已设定种子的表中插入外键? 工厂代码是在同一个文件中吗?有什么好办法吗 文件 模型用户Php laravel工厂插入外键,php,laravel,laravel-5.3,Php,Laravel,Laravel 5.3,大家好,想帮忙的人 我正在尝试创建工厂文件来设定数据库的种子,我有一个问题:如何从已设定种子的表中插入外键? 工厂代码是在同一个文件中吗?有什么好办法吗 文件 模型用户 <?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { protected $table = 'user'; //name o
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $table = 'user'; //name of the table in database
protected $primaryKey = 'Id'; //Primary Key of the table
/**
* Relations between tables
*/
public function GetLoginInfo()
{
return $this->hasMany('App\Models\LoginInfo', 'UserId');
}
public function getStatus()
{
return $this->belongsTo('App\Models\AccountStatus');
}
}
我在工厂里看到大写的F
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
$accountStatus = factory(App\Models\AccountStatus::class)->create()
return [
'Username' => $faker->unique()->userName,
'Password' => bcrypt('test'),
'Email' => $faker->unique()->safeEmail,
'Name' => $faker->name,
'StatusId' => $accountStatus->id,
];
});
编辑(改进)
如果您有一个模型依赖于另一个模型。您可以这样做,使用回调函数创建相关的
像这样
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
return [
'Username' => $faker->unique()->userName,
'Password' => bcrypt('test'),
'Email' => $faker->unique()->safeEmail,
'Name' => $faker->name,
'StatusId' => function () {
return factory(App\Models\AccountStatus::class)->create()->id;
}
];
});
您需要记住的一点是,如果相关的(状态模型)有一个依赖于父级(用户模型)的模型,那么这将进入一个无休止的循环。工作但是我找到了另一种方法,这样我总是创建一个新的帐户状态,这样我就得到了一个随机的已经创建的帐户状态,因为我的示例是更好的“StatusId”=>\App\Models\AccountStatus::all()->random()->Id,
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
return [
'Username' => $faker->unique()->userName,
'Password' => bcrypt('test'),
'Email' => $faker->unique()->safeEmail,
'Name' => $faker->name,
'StatusId' => factory(App\Models\AccountStatus::class)->create()->id,
];
});
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
$accountStatus = factory(App\Models\AccountStatus::class)->create()
return [
'Username' => $faker->unique()->userName,
'Password' => bcrypt('test'),
'Email' => $faker->unique()->safeEmail,
'Name' => $faker->name,
'StatusId' => $accountStatus->id,
];
});
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
return [
'Username' => $faker->unique()->userName,
'Password' => bcrypt('test'),
'Email' => $faker->unique()->safeEmail,
'Name' => $faker->name,
'StatusId' => function () {
return factory(App\Models\AccountStatus::class)->create()->id;
}
];
});