离线 / oc-seeder-plugin
October CMS 的 Laravel Seeder 集成。
Requires
- php: >=7.2
- composer/installers: ~1.0
- fakerphp/faker: ^1.9.1
- laravel/framework: ^9.0|^10.0
README
October CMS 的 Laravel Seeder 集成。
此插件将 Laravel 的 Factory 和数据库 Seeder 功能与 October CMS 集成。
安装
- 使用 Composer 安装插件。
composer require offline/oc-seeder-plugin
- 设置随机文件助手。
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 迁移,请进行以下更改
- 将所有工厂从
factories.php移动到factories目录中各自的Factory类中。 - 将
OFFLINE\Seeder\Traits\HasSeederFactory特性添加到所有模型中 - 更改您的
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();
如果您需要除图像之外的内容,可以使用 file、pdf、mp3 或 xlsx 状态
$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 的启发。