web-dev-qa-db-ja.com

Laravel偽造者は名前から性別を生成します

性別が名前と一致するように名前を生成した、偽造者を使用して性別を生成する最適な方法は何ですか

 return [
    'name' => $faker->name,
    'email' => $faker->safeEmail,
    'username' => $faker->userName,
    'phone' => $faker->phoneNumber,
    'gender' => $faker->randomElement(['male', 'female']),//the gender does not match the name as it is.
    'address' => $faker->address,
    'dob' => $faker->date($format = 'Y-m-d', $max = 'now'),
    'password' => bcrypt('secret')
    ];
7
Morris Mukiri

ドキュメントとGithubの問題セクションで提起された問題を見ると、あなたの解決策が最善のようです。一部のメソッドでは、名前の性別を指定できるため、次のように実行できます。

$gender = $faker->randomElement(['male', 'female']);

return [
    'name' => $faker->name($gender),
    'email' => $faker->safeEmail,
    'username' => $faker->userName,
    'phone' => $faker->phoneNumber,
    'gender' => $gender,
    'address' => $faker->address,
    'dob' => $faker->date($format = 'Y-m-d', $max = 'now'),
    'password' => bcrypt('secret')
];

うまくいけば、これはあなたの要件に適合します。

14
James
  1. メソッドrandomElementsは、単一の要素を含む配列を返すため、本当に「女性」または「男性」を取得したい場合は、忘れないでください。最初の行の最後にこれを追加するには:[0]。結果の配列の最初の要素(インデックス0)が必要です(要素は1つだけです)。

    $gender = $faker->randomElements(['male', 'female'])[0];
    
  2. もう一つ。必要なものを正確に取得するには、名前の代わりにfirstNameを使用する必要があります。このように、名は性別によって異なります。このようにしてください:

    return [
        'name' => $faker->firstName($gender),
        'email' => $faker->safeEmail,
        'username' => $faker->userName,
        'phone' => $faker->phoneNumber,
        'gender' => $gender,
        'address' => $faker->address,
        'dob' => $faker->date($format = 'Y-m-d', $max = 'now'),
        'password' => bcrypt('secret')
    ];
    
  3. 最後にもう1つ、「male」と「female」の代わりに「Male」と「Female」を使用すると、これは[〜#〜] not [〜#〜]動作します!!

2
Reinier Garcia

追加の変数なしでそれを行うには、このようにします

return [
  'gender' => $faker->randomElements(['male', 'female']),
  'name' => $faker->name(function (array $user) {return $user['gender'];})
]

それが役に立てば幸い

1
Bang Fady

実際、すべての答えが私にとって実際にはうまくいきませんでした。それは女性か男性だけを返しました。私はほとんど同じ問題を抱えていました。私は3つの性別からランダムな要素が必要でした????????。それはいつも私にこのエラーメッセージを与えました:

 Illuminate\Database\QueryException  : Array to string conversion (SQL: insert 
 into `users` (`name`, `gender`, `email`, `admin`, `author`, `password`, 
 `remember_token`) values (Margaret Robel I, male, [email protected], 1, 0, 
 dummylogin, gwKdVN7zYv))

 at /Users/mangrove/Desktop/php-workspace/laravel- 
 mangrove/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
 660|         // If an exception occurs when attempting to run a query, we'll 
 format the error
 661|         // message to include the bindings with SQL, which will make this 
 exception a
 662|         // lot more helpful to the developer instead of just the 
 database's errors.
 663|         catch (Exception $e) {
 > 664|             throw new QueryException(
 665|                 $query, $this->prepareBindings($bindings), $e
 666|             );
 667|         }
 668| 

 Exception trace:

 1   ErrorException::("Array to string conversion")
 /Users/mangrove/Desktop/php-workspace/laravel- 

 mangrove/vendor/laravel/framework/src/Illuminate/Database/
 MySqlConnection.php:80

 2   PDOStatement::bindValue()
 /Users/mangrove/Desktop/php-workspace/laravel- 

 mangrove/vendor/laravel/framework/src/Illuminate/
 Database/MySqlConnection.php:80

Faker v.1.8. のドキュメントを確認した後

これは私のために働いた:

public function run()
{
  $faker = Faker::create();
  foreach(range(1,10) as $index){

    // Returns always random genders according to the name, inclusive mixed !!
    $gender = $faker->randomElement($array = array('male','female','mixed'));

    DB::table('users')->insert([
          'name' => $faker->name($gender),   
          'gender' => $gender,           
          'email' => $faker->unique()->safeEmail,
          'admin' => $faker->numberBetween($min = 0, $max = 1),
          'author'=> $faker->numberBetween($min = 0, $max = 1),
          'password' => 'dummylogin',
          'remember_token' => str_random(10),
    ]);
  }
}

It turns out mixed genders will always have different names, because you can 
be either way ????⚧
0
mangrove108