簡體   English   中英

laravel工廠插入外鍵

[英]laravel factory insert foreign key

大家好,他們正在努力提供幫助,

我試圖創建工廠文件來播種我的數據庫,我有一個問題,我如何從已播種的表中插入一個外鍵? 而工廠代碼是全部在同一個文件中? 對此有什么好的實踐?

模型用戶

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

}

模型帳戶狀態

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class AccountStatus extends Model
{
  protected $table = 'account_status'; //name of the table in database
  protected $primaryKey = 'Id'; //primary Key of the table
  public $timestamps = false; //true if this table have timestaps
  /**
   * Relations between tables
   */
   public function GetUsers()
   {
     return $this->hasMany('App\Models\Users', 'StatusId');
   }
}

工廠檔案:

<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */

//Factory for Account Status table
$factory->define(App\Models\AccountStatus::class, function (Faker\Generator $faker) {
    return [
      'Description' => $faker->word,
    ];
});

//Factory for user table
$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,
    ];
});

這是我試圖做的,你可以看到:工廠(App \\ Models \\ AccountStatus :: class) - > create() - > 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,
    ];
});

我在工廠看到一個大寫的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;
       }
    ];
});

您需要記住的一件事是,如果相關(狀態模型)具有依賴於父(用戶模型)的模型,這將進入無限循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM