【问题标题】:Old vs new? Or what is the difference factory method definition() and $factory->define()旧与新?或者工厂方法定义()和$factory->define()有什么区别
【发布时间】:2021-09-03 01:08:05
【问题描述】:

按照 laravel-news.com 上的 Your First Laravel application 教程,我需要编辑由 $ php artisan make:model --factory Link 创建的 LinkFactory.php

make创建的默认代码如下:

<?php

namespace Database\Factories;

use App\Models\Link;
use Illuminate\Database\Eloquent\Factories\Factory;

class LinkFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Link::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            //
        ];
    }
}

教程建议用以下代码替换该代码:

<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Link;
use Faker\Generator as Faker;
$factory->define(Link::class, function (Faker $faker) {
    return [
        'title' => substr($faker->sentence(2), 0, -1),
        'url' => $faker->url,
        'description' => $faker->paragraph,
    ];
});

我了解一些命名空间差异,即。 App\Link -&gt; App\Models\Link\Illuminate\Database\Eloquent\Factory -&gt; Illuminate\Database\Eloquent\Factories\Factory 以及需要添加 Faker\Generator as Faker,但我不确定如何处理其余部分。

我的想法如下:

<?php

namespace Database\Factories;

use App\Models\Link;
use Illuminate\Database\Eloquent\Factories\Factory;
use Faker\Generator as Faker;

class LinkFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Link::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        $faker = new Faker;
        
        return [
            'title' => substr($faker->sentence(2), 0, -1),
            'url' => $faker->url,
            'description' => $faker->paragraph,
        ];
    }
}

首先,我需要知道这是否正确,以及为什么不正确。

其次,我不知道我是否需要在这里的任何地方使用$model 属性。

第三,这对代码中其他地方的进一步使用有何影响?

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    现在我找到了关于Undefined factory() helper function 的答案,我想我的问题可能会被标记为[重复]。

    现在可以了。

    LinkFactory.php

    <?php
    
    namespace Database\Factories;
    
    use App\Models\Link;
    use Illuminate\Database\Eloquent\Factories\Factory;
    
    class LinkFactory extends Factory
    {
        /**
         * The name of the factory's corresponding model.
         *
         * @var string
         */
        protected $model = Link::class;
    
        /**
         * Define the model's default state.
         *
         * @return array
         */
        public function definition()
        {        
            return [
                'title' => substr($this->faker->sentence(2), 0, -1),
                'url' => $this->faker->url,
                'description' => $this->faker->paragraph,
            ];
        }
    }
    

    LinksTableSeeder.php

    <?php
    
    namespace Database\Seeders;
    
    use App\Models\Link;
    use Illuminate\Database\Seeder;
    
    class LinksTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            Link::factory()->count(30)->create();
        }
    }
    

    我还必须将 DatabaseSeeder.php 更改为

    <?php
    
    namespace Database\Seeders;
    
    use Illuminate\Database\Seeder;
    
    class DatabaseSeeder extends Seeder
    {
        /**
         * Seed the application's database.
         *
         * @return void
         */
        public function run()
        {
            $this->call(LinksTableSeeder::class);
        }
    }
    

    然后跑了

    $ php artisan migrate:fresh --seed
    

    并且数据库已被填充。

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2013-09-17
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2014-06-01
      相关资源
      最近更新 更多