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