如何为帖子创建工厂,在工厂中还要在Laravel中为该帖子输入元表中的数据

问题描述 投票:0回答:1

使用工厂是创建种子数据的一种更清洁的方法。我可以从foreach或for循环的另一种方法生成结果。但是如何与工厂合作?

以下是出厂后页面


<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\Post;
use App\MetaData;
use Faker\Factory;

$factory->define(Post::class, function () {
    $faker = Faker\Factory::create('en_IN');
    $w = $faker->unique()->sentence.' '.mt_rand(0,1000);
    $r = [
        'title' => $w,
        'slug' => strtolower(str_replace(' ', '-', $w)),
        'banner' => 'https://source.unsplash.com/random/600x600',
        'content' => $faker->text,
        'views' => mt_rand(0,1000),
        'status' => rand(0,1),
        'creator_id' => mt_rand(0,100),
        'moderator_id' => mt_rand(0,100),
    ];

    $factory->define(MetaData::class, function () {
        return [
            'for' => 'article',
            'record_id' => $r->id,
            'title' => $w,
            'slug' => strtolower(str_replace(' ', '-', $w)),
            'description' => $faker->sentences,
            'banner' => 'https://source.unsplash.com/random/600x600',
            'keywords' => $faker->words,
            'status' => 1,
            'creator_id' => mt_rand(0,100),
            'moderator_id' => mt_rand(0,100),
        ];
    });
    return $r;
});


我想做这样的事情,但最终出现如下错误:



   ErrorException  : Undefined variable: factory

  at /Users/dragonar/Dev/pdp/database/factories/PostFactory.php:23
    19|         'creator_id' => mt_rand(0,100),
    20|         'moderator_id' => mt_rand(0,100),
    21|     ];
    22| 
  > 23|     $factory->define(MetaData::class, function () {
    24|         return [
    25|             'for' => 'article',
    26|             'record_id' => $r->id,
    27|             'title' => $w,

  Exception trace:

  1   Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Undefined variable: factory", "/Users/dragonar/Dev/pdp/database/factories/PostFactory.php", [Object(Faker\Generator), "Aut voluptatum sed aut beatae. 380"])
      /Users/dragonar/Dev/pdp/database/factories/PostFactory.php:23

  2   Illuminate\Database\Eloquent\Factory::{closure}(Object(Faker\Generator), [])
      /Users/dragonar/Dev/pdp/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:273

  Please use the argument -v to see more details.

如果可以解决,我也想在同一帖子中添加类别和标签。

php laravel factory record faker
1个回答
0
投票

请尝试一下

$factory->define('App\MetaData', function($faker) use ($factory) {
    // Your stuff here
});
© www.soinside.com 2019 - 2024. All rights reserved.