Actuellement, dans mon ModelFactory.php, j'ai:
$factory->define(App\Reply::class, function (Faker\Generator $faker) {
return [
'thread_id' => 1,
'user_id' => 1,
'body' => $faker->paragraph
];
});
Je voudrais générer un user_id aléatoire à partir de l'un des ID utilisateur déjà stockés dans la table des utilisateurs. Je suis perplexe parce que je ne sais pas comment afficher la sortie de données pour coder correctement, et je me demandais comment je pourrais permettre à Laravel de choisir un ID utilisateur aléatoire et de l'insérer dans la base de données. Merci! :)
Essayez ce qui suit.
use App\User; // Assuming this is your User Model class with namespace.
$factory->define(App\Reply::class, function (Faker\Generator $faker) {
return [
'thread_id' => 1,
'user_id' => User::all()->random()->user_id,
'body' => $faker->paragraph
];
});
N'oubliez pas que cela récupère toutes les données utilisateur de votre table, puis choisit un identifiant au hasard. Donc, si votre table contient une énorme quantité de données, ce n'est pas recommandé. Au lieu de cela, dans votre scénario de test, vous pouvez créer un nouvel utilisateur (via sa propre fabrique) et affecter l'ID à l'objet Répondre généré à partir de la fabrique ci-dessus.
Alternativement, vous pouvez interroger un utilisateur spécifique dans la définition d'usine ci-dessus.
'user_id' => User::where('username', 'like', '[email protected]')->get()->random()->user_id
Si vous avez un utilisateur de test configuré dans votre base de données, cela évitera d'extraire toutes les données utilisateur.
Toute classe qui étend Illuminate\Database\Eloquent\Model
Pourra faire ceci:
User::inRandomOrder()->first()
Ou pour obtenir une collection de 3 articles:
User::inRandomOrder()->limit(3)->get()
Cela pourrait être plus efficace que d'utiliser User::all()->first()
, qui devrait d'abord interroger tous les utilisateurs.
Votre IDE (comme PhpStorm) sera probablement très confus que c'est une option.
Voir aussi: Laravel - Ligne aléatoire éloquente ou courante
Cela ne fonctionne pas comme ça 'user_id':
User::all()->random()->user_id
Mais c'est comme ça que ça marche:
User::all()->random()->id