离线/oc-seeder-plugin

October CMS 的 Laravel Seeder 集成。

安装: 166

依赖者: 0

建议者: 0

安全: 0

星标: 12

关注者: 5

分支: 2

开放问题: 0

类型:october-plugin

v3.0.2 2024-02-28 07:55 UTC

This package is auto-updated.

Last update: 2024-08-28 09:17:42 UTC


README

October CMS 的 Laravel Seeder 集成。

此插件将 Laravel 的 Factory 和数据库 Seeder 功能与 October CMS 集成。

安装

  1. 使用 Composer 安装插件。
composer require offline/oc-seeder-plugin
  1. 设置随机文件助手。
php artisan seeder:init

定义工厂

要为您的插件定义一个新的 Factory,请在插件的 factories 文件夹中创建一个 YourModelFactory.php 文件,并像在 Laravel 中一样定义您的工厂(点击查看)

<?php
// plugins/yourvendor/yourplugin/factories/YourModelFactory.php
namespace YourVendor\YourPlugin\Factories;

class YourModelFactory extends \OFFLINE\Seeder\Classes\Factory
{
    /**
     * Default model attributes.
     */
    public function definition()
    {
        return [
            'name' => fake()->name,
            'number' => fake()->numberBetween(0, 6),
        ];
    }

    /**
     * Define states: Override attributes that differ from the default definition.
     * Use it like this: YourModel::factory()->withHigherNumber()->make();
     */
    public function withHigherNumber()
    {
        return $this->states(function(array $attributes) {
            return [
                'number' => fake()->numberBetween(100, 900);
            ];
        });
    }
}

接下来,将 OFFLINE\Seeder\Traits\HasSeederFactory 特性添加到您的模型中

<?php
// plugins/yourvendor/yourplugin/models/YourModel.php
namespace YourVendor\YourPlugin\Models;

class YourModel extends Model
{
    use \OFFLINE\Seeder\Traits\HasSeederFactory; // add this
}

定义种子

在您的 Plugin.php 中添加一个 registerSeeder 方法,在该方法中为您的插件的模型生成种子

public function registerSeeder()
{
    \YourVendor\YourPlugin\Models\YourModel::factory()->count(50)->create();
}

定制集成

从版本 2.1 开始,此插件可用于生成 Tailor 数据。

要求

要使用此插件生成 Tailor 数据,所有 Tailor 蓝图处理器必须位于 SomeSection\SomeEntity 格式,如 Blog\Post

定义工厂

对于类似于 Blog\Post 的 Tailer 实体,创建一个名为 app/factories/blog/PostFactory.php 的文件,并在其中定义您的工厂。

<?php

namespace App\Factories\Blog;

class PostFactory extends \OFFLINE\Seeder\Classes\Factory
{
    public function definition()
    {
        return [
            'title' => fake()->sentence,
            // ...
            'is_enabled' => true,
        ];
    }
}

注册种子

app/Provider.php 中添加一个静态 registerSeeder 方法,并按如下方式定义您的种子

<?php

namespace App;

use OFFLINE\Seeder\Classes\Factory;

class Provider extends \System\Classes\AppBase
{
    // ...

    /**
     * @param $seed \Closure(string $handle, \Closure(Factory $factory) $callback): void
     */
    public static function registerSeeder(\Closure $seed)
    {
        // Blog\Post = blueprint handle
        $seed('Blog\Post', function(Factory $factory) {
            $factory->count(10)->create();
        });

        $seed('Blog\Category', function(Factory $factory) {
            // ...
        });

        $seed('Blog\Author', function(Factory $factory) {
            // ...
        });
    }

特定蓝图生成种子

可以使用 --plugins 标志来生成特定实体

php artisan offline:seeder --plugins=Blog\\Post

从 2.x 迁移

October 3.3 引入了其自己的 plugin:seed Artisan 命令。为了解决此冲突,此插件的 Artisan 命令已重命名为 offline:seeder

不需要特殊迁移工作,您可以直接使用新的 Artisan 命令。

从 1.x 迁移

要将此插件的旧种子从版本 1.0 迁移,请进行以下更改

  1. 将所有工厂从 factories.php 移动到 factories 目录中各自的 Factory 类中。
  2. OFFLINE\Seeder\Traits\HasSeederFactory 特性添加到所有模型中
  3. 更改您的 registerSeeder 方法
// Old
factory(YourModel::class)->make();
factory(YourModel::class)->states('special')->make();
// New
YourModel::factory()->make();
YourModel::factory()->special()->make();

运行种子

只需运行 php artisan offline:seeder 即可运行所有插件的种子。每个插件的种子将只运行一次。

要运行已生成种子的插件的种子,请使用 --fresh 选项。请注意,这将完全回滚并重新安装所有已注册种子的插件,因此任何插件数据都将丢失。

您可以使用 --plugins 选项来运行指定的种子。只需提供以逗号分隔的插件名称列表。

php artisan offline:seeder --plugins=Vendor.PluginA,Vendor.PluginB --fresh

包含的工厂

此插件包含以下模型的工厂

\System\Models\File::class

\System\Models\File::factory()->make() 返回一个带有随机图像的 File 模型。您可以在任何种子中使用它来将文件附加到创建的模型中

// Create a model
$myModel = \YourVendor\YourPlugin\Models\YourModel::factory()->create();

// Attach an image
$image = \System\Models\File::factory()->make();
$myModel->image()->save($image);

有可用的大小状态:tiny 返回一个 90x90 图像,hd 返回一个 1920x1080 图像,而 huge 返回一个 6000x4000 图像。只有图像的一侧将匹配给定的维度(默认情况下未裁剪)。

$tiny = \System\Models\File::factory()->tiny()->make();
$hd = \System\Models\File::factory()->hd()->make();
$huge = \System\Models\File::factory()->huge()->make();

如果您需要除图像之外的内容,可以使用 filepdfmp3xlsx 状态

$randomType = \System\Models\File::factory()->file()->make();
$pdf = \System\Models\File::factory()->pdf()->make();
$mp3 = \System\Models\File::factory()->mp3()->make();
$xlsx = \System\Models\File::factory()->xlsx()->make();

\Backend\Models\User::class

\Backend\Models\User::factory()->make() 返回一个 Backend User 模型。您可以使用 superuser 状态来生成超级用户。

// Build a simple backend user.
\Backend\Models\User::factory()->make();

// Build a superuser backend user.
\Backend\Models\User::factory()->superuser()->make();

\RainLab\User\Models\User::class

\RainLab\User\Models\User::factory()->make() 返回一个 RainLab User 模型。

Twig 辅助函数

您可以使用 random_image() 辅助函数在您的标记中直接获取随机图像。

<img src="{{ random_image().thumb(400, 800) }}" alt=""/>
<img src="{{ random_image('tiny').thumb(400, 800) }}" alt=""/>
<img src="{{ random_image('hd').thumb(400, 800) }}" alt=""/>
<img src="{{ random_image('huge').thumb(400, 800) }}" alt=""/>

如果您需要有效的文件下载,可以使用 random_file() 函数

<a href="{{ random_file('xlsx').path }}" download>Download the spreadsheet!</a>
<a href="{{ random_file('pdf').path }}" download>Download the PDF!</a>

{# or make some noise #}
<audio controls src="{{ random_file('mp3').path }}"></audio>

版权信息

本插件中使用的所有图片均由 unsplash.com 提供。

致谢

本插件深受 Inetis' oc-testing-plugin 的启发。