mirror of
https://github.com/ZorgCC/lumen-generators.git
synced 2024-12-27 06:25:28 +03:00
preparing release 1.3.0
This commit is contained in:
parent
55fcf27362
commit
482cc3f8c4
28
README.md
28
README.md
@ -79,7 +79,7 @@ wn:route Generates RESTful routes.
|
|||||||
To generate a RESTful resource for your application (model, migration, controller and RESTful routes), you simply need to run one single command. For example:
|
To generate a RESTful resource for your application (model, migration, controller and RESTful routes), you simply need to run one single command. For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
php artisan wn:resource task "name;string;required;fillable project_id;integer:unsigned;numeric;fillable,key due;date;;date" --belongs-to=project
|
php artisan wn:resource task "name;string;required;fillable project_id;integer:unsigned;numeric;fillable,key due;date;;date" --add=timestamps --belongs-to=project
|
||||||
```
|
```
|
||||||
|
|
||||||
will generate these files:
|
will generate these files:
|
||||||
@ -257,7 +257,7 @@ More then that, you can generate multiple resources with only one command ! [Cli
|
|||||||
The `wn:model` command is used to generate a model class based on Eloquent. It has the following syntax:
|
The `wn:model` command is used to generate a model class based on Eloquent. It has the following syntax:
|
||||||
|
|
||||||
```
|
```
|
||||||
wn:model name [--fillable=...] [--dates=...] [--has-many=...] [--has-one=...] [--belongs-to=...] [--belongs-to-many=...] [--rules=...] [--path=...] [--force=true]
|
wn:model name [--fillable=...] [--dates=...] [--has-many=...] [--has-one=...] [--belongs-to=...] [--belongs-to-many=...] [--rules=...] [--timestamps=false] [--path=...] [--force=true]
|
||||||
```
|
```
|
||||||
|
|
||||||
- **name**: the name of the model.
|
- **name**: the name of the model.
|
||||||
@ -357,6 +357,8 @@ gives:
|
|||||||
];
|
];
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- **--timestamps**: Enables timestamps on the model. Giving `--timestamps=false` will add `public $timestamps = false;` to the generated model. The default value is `true`.
|
||||||
|
|
||||||
- **--force**: tells the generator to override the existing file. By default, if the model file already exists, it will not be overriden and the output will be something like:
|
- **--force**: tells the generator to override the existing file. By default, if the model file already exists, it will not be overriden and the output will be something like:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -368,7 +370,7 @@ TestingModel model already exists; use --force option to override it !
|
|||||||
The `wn:migration` command is used to generate a migration to create a table with schema. It has the following syntax:
|
The `wn:migration` command is used to generate a migration to create a table with schema. It has the following syntax:
|
||||||
|
|
||||||
```
|
```
|
||||||
wn:migration table [--schema=...] [--keys=...] [--force=true] [--file=...]
|
wn:migration table [--schema=...] [--add=...] [--keys=...] [--force=true] [--file=...]
|
||||||
```
|
```
|
||||||
|
|
||||||
- **table**: the name of the table to create.
|
- **table**: the name of the table to create.
|
||||||
@ -398,7 +400,7 @@ class CreateTasksMigration extends Migration
|
|||||||
$table->decimal('amount', 5, 2)->after('size')->default(8);
|
$table->decimal('amount', 5, 2)->after('size')->default(8);
|
||||||
$table->string('title')->nullable();
|
$table->string('title')->nullable();
|
||||||
// Constraints declaration
|
// Constraints declaration
|
||||||
$table->timestamps();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,6 +411,8 @@ class CreateTasksMigration extends Migration
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- **--add**: Specifies additional columns like `timestamps`, `softDeletes`, `rememberToken` and `nullableTimestamps`.
|
||||||
|
|
||||||
- **--keys**: the foreign keys of the table following the syntax `field:column:table:on_delete:on_update ...`. The `column` is optional ("id" by default). The `table` is optional if the field follows the naming convention `singular_table_name_id`. `on_delete` and `on_update` are optional too.
|
- **--keys**: the foreign keys of the table following the syntax `field:column:table:on_delete:on_update ...`. The `column` is optional ("id" by default). The `table` is optional if the field follows the naming convention `singular_table_name_id`. `on_delete` and `on_update` are optional too.
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -433,15 +437,17 @@ $table->foreign('user_id')
|
|||||||
The `wn:pivot-table` command is used to generate a migration to create a pivot table between two models. It has the following syntax:
|
The `wn:pivot-table` command is used to generate a migration to create a pivot table between two models. It has the following syntax:
|
||||||
|
|
||||||
```
|
```
|
||||||
wn:pivot-table model1 model2 [--force=true] [--file=...]
|
wn:pivot-table model1 model2 [--add=...] [--force=true] [--file=...]
|
||||||
```
|
```
|
||||||
|
|
||||||
- **model1** and **model2**: names of the two models (or the two tables if the models don't follow the naming conventions)
|
- **model1** and **model2**: names of the two models (or the two tables if the models don't follow the naming conventions)
|
||||||
|
|
||||||
|
- **--add**: Specifies additional columns like `timestamps`, `softDeletes`, `rememberToken` and `nullableTimestamps`.
|
||||||
|
|
||||||
- **--file**: The migration file name. By default the name follows the patern `date_time_create_table_name.php`.
|
- **--file**: The migration file name. By default the name follows the patern `date_time_create_table_name.php`.
|
||||||
|
|
||||||
```
|
```
|
||||||
php artisan wn:pivot-table Tag Project
|
php artisan wn:pivot-table Tag Project --add=timestamps
|
||||||
```
|
```
|
||||||
gives:
|
gives:
|
||||||
|
|
||||||
@ -541,7 +547,7 @@ $app->delete('project-type/{id}', 'ProjectTypesController@remove');
|
|||||||
|
|
||||||
### Resource Generator
|
### Resource Generator
|
||||||
|
|
||||||
The `wn:resource` command makes it very easy to generate a RESTful resource. It generates a model, migration, controller and routes. The syntax is : `wn:resource name fields [--has-many=...] [--has-one=...] [--belongs-to=...] [--migration-file=...] [--path=...] [--force=true]`
|
The `wn:resource` command makes it very easy to generate a RESTful resource. It generates a model, migration, controller and routes. The syntax is : `wn:resource name fields [--add=...] [--has-many=...] [--has-one=...] [--belongs-to=...] [--migration-file=...] [--path=...] [--force=true]`
|
||||||
|
|
||||||
- **name**: the name of the resource used in the URLs and to determine the model, table and controller names.
|
- **name**: the name of the resource used in the URLs and to determine the model, table and controller names.
|
||||||
|
|
||||||
@ -561,6 +567,8 @@ The `wn:resource` command makes it very easy to generate a RESTful resource. It
|
|||||||
|
|
||||||
- `key`: this field is a foreign key.
|
- `key`: this field is a foreign key.
|
||||||
|
|
||||||
|
- **--add**: Specifies additional columns like `timestamps`, `softDeletes`, `rememberToken` and `nullableTimestamps` of the migration and if the list contains no timestamps, the model with contain `public $timestamps = false;`.
|
||||||
|
|
||||||
- **--has-one**, **--has-many** and **--belongs-to** are the same as for the `wn:model` command.
|
- **--has-one**, **--has-many** and **--belongs-to** are the same as for the `wn:model` command.
|
||||||
|
|
||||||
- **--migration-file**: passed to the `wn:migration` as the `--file` option.
|
- **--migration-file**: passed to the `wn:migration` as the `--file` option.
|
||||||
@ -626,9 +634,13 @@ To test the generators, I included a fresh lumen installation under the folder `
|
|||||||
|
|
||||||
- **Seeder and Test generators**
|
- **Seeder and Test generators**
|
||||||
|
|
||||||
|
- Requested Feature: [Custom Templates](https://github.com/webNeat/lumen-generators/issues/13)
|
||||||
|
|
||||||
|
- **Version 1.3.0**
|
||||||
|
|
||||||
- Requested Feature: [Disabling timestamps](https://github.com/webNeat/lumen-generators/issues/15)
|
- Requested Feature: [Disabling timestamps](https://github.com/webNeat/lumen-generators/issues/15)
|
||||||
|
|
||||||
- Requested Feature: [Custom Templates](https://github.com/webNeat/lumen-generators/issues/13)
|
- Requested Feature: [Lumen 5.3 routes support](https://github.com/webNeat/lumen-generators/issues/21)
|
||||||
|
|
||||||
- **Version 1.2.0**
|
- **Version 1.2.0**
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
$I = new AcceptanceTester($scenario);
|
$I = new AcceptanceTester($scenario);
|
||||||
|
|
||||||
$I->wantTo('generate the REST actions trait');
|
$I->wantTo('generate the REST actions trait');
|
||||||
$I->runShellCommand('php artisan wn:controller:rest-actions');
|
$I->runShellCommand('php artisan wn:controller:rest-actions --force=true');
|
||||||
$I->seeInShellOutput('REST actions trait generated');
|
$I->seeInShellOutput('REST actions trait generated');
|
||||||
$I->seeFileFound('./app/Http/Controllers/RESTActions.php');
|
$I->seeFileFound('./app/Http/Controllers/RESTActions.php');
|
||||||
$I->openFile('./app/Http/Controllers/RESTActions.php');
|
$I->openFile('./app/Http/Controllers/RESTActions.php');
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
$I = new AcceptanceTester($scenario);
|
$I = new AcceptanceTester($scenario);
|
||||||
|
|
||||||
$I->wantTo('generate a migration without schema');
|
$I->wantTo('generate a migration without schema');
|
||||||
$I->runShellCommand('php artisan wn:migration tasks --file=create_tasks');
|
$I->runShellCommand('php artisan wn:migration tasks --add=timestamps --file=create_tasks');
|
||||||
$I->seeInShellOutput('tasks migration generated');
|
$I->seeInShellOutput('tasks migration generated');
|
||||||
$I->seeFileFound('./database/migrations/create_tasks.php');
|
$I->seeFileFound('./database/migrations/create_tasks.php');
|
||||||
$I->openFile('./database/migrations/create_tasks.php');
|
$I->openFile('./database/migrations/create_tasks.php');
|
||||||
@ -32,8 +32,39 @@ class CreateTasksTable extends Migration
|
|||||||
');
|
');
|
||||||
$I->deleteFile('./database/migrations/create_tasks.php');
|
$I->deleteFile('./database/migrations/create_tasks.php');
|
||||||
|
|
||||||
|
$I->wantTo('generate a migration without schema or timestamps');
|
||||||
|
$I->runShellCommand('php artisan wn:migration tasks --file=create_tasks');
|
||||||
|
$I->seeInShellOutput('tasks migration generated');
|
||||||
|
$I->seeFileFound('./database/migrations/create_tasks.php');
|
||||||
|
$I->openFile('./database/migrations/create_tasks.php');
|
||||||
|
$I->seeFileContentsEqual('<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
|
||||||
|
class CreateTasksTable extends Migration
|
||||||
|
{
|
||||||
|
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create(\'tasks\', function(Blueprint $table) {
|
||||||
|
$table->increments(\'id\');
|
||||||
|
// Schema declaration
|
||||||
|
// Constraints declaration
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::drop(\'tasks\');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
');
|
||||||
|
$I->deleteFile('./database/migrations/create_tasks.php');
|
||||||
|
|
||||||
$I->wantTo('generate a migration with schema');
|
$I->wantTo('generate a migration with schema');
|
||||||
$I->runShellCommand('php artisan wn:migration tasks --file=create_tasks --schema="amount:decimal.5,2:after.\'size\':default.8 title:string:nullable"');
|
$I->runShellCommand('php artisan wn:migration tasks --add=timestamps --file=create_tasks --schema="amount:decimal.5,2:after.\'size\':default.8 title:string:nullable"');
|
||||||
$I->seeInShellOutput('tasks migration generated');
|
$I->seeInShellOutput('tasks migration generated');
|
||||||
$I->seeFileFound('./database/migrations/create_tasks.php');
|
$I->seeFileFound('./database/migrations/create_tasks.php');
|
||||||
$I->openFile('./database/migrations/create_tasks.php');
|
$I->openFile('./database/migrations/create_tasks.php');
|
||||||
|
@ -27,6 +27,34 @@ class TestingModel extends Model {
|
|||||||
');
|
');
|
||||||
$I->deleteFile('./tests/tmp/TestingModel.php');
|
$I->deleteFile('./tests/tmp/TestingModel.php');
|
||||||
|
|
||||||
|
$I->wantTo('generate a model without fillable fields, dates or timestamps');
|
||||||
|
$I->runShellCommand('php artisan wn:model TestingModel --path=tests/tmp --force=true --timestamps=false');
|
||||||
|
$I->seeInShellOutput('TestingModel model generated');
|
||||||
|
$I->seeFileFound('./tests/tmp/TestingModel.php');
|
||||||
|
$I->openFile('./tests/tmp/TestingModel.php');
|
||||||
|
|
||||||
|
$I->seeFileContentsEqual('<?php namespace Tests\Tmp;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class TestingModel extends Model {
|
||||||
|
|
||||||
|
protected $fillable = [];
|
||||||
|
|
||||||
|
protected $dates = [];
|
||||||
|
|
||||||
|
public static $rules = [
|
||||||
|
// Validation rules
|
||||||
|
];
|
||||||
|
|
||||||
|
public $timestamps = false;
|
||||||
|
|
||||||
|
// Relationships
|
||||||
|
|
||||||
|
}
|
||||||
|
');
|
||||||
|
$I->deleteFile('./tests/tmp/TestingModel.php');
|
||||||
|
|
||||||
$I->wantTo('generate a model with fillable fields');
|
$I->wantTo('generate a model with fillable fields');
|
||||||
$I->runShellCommand('php artisan wn:model TestingModel --fillable=name,title --path=tests/tmp');
|
$I->runShellCommand('php artisan wn:model TestingModel --fillable=name,title --path=tests/tmp');
|
||||||
$I->seeFileFound('./tests/tmp/TestingModel.php');
|
$I->seeFileFound('./tests/tmp/TestingModel.php');
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
$I = new AcceptanceTester($scenario);
|
$I = new AcceptanceTester($scenario);
|
||||||
|
|
||||||
$I->wantTo('generate a pivot table');
|
$I->wantTo('generate a pivot table');
|
||||||
$I->runShellCommand('php artisan wn:pivot-table Tag Project --file=pivot_table');
|
$I->runShellCommand('php artisan wn:pivot-table Tag Project --add=timestamps --file=pivot_table');
|
||||||
$I->seeInShellOutput('project_tag migration generated');
|
$I->seeInShellOutput('project_tag migration generated');
|
||||||
$I->seeFileFound('./database/migrations/pivot_table.php');
|
$I->seeFileFound('./database/migrations/pivot_table.php');
|
||||||
$I->openFile('./database/migrations/pivot_table.php');
|
$I->openFile('./database/migrations/pivot_table.php');
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
$I = new AcceptanceTester($scenario);
|
$I = new AcceptanceTester($scenario);
|
||||||
|
|
||||||
$I->wantTo('generate a RESTful resource');
|
$I->wantTo('generate a RESTful resource');
|
||||||
$I->runShellCommand('php artisan wn:resource task_category "name;string:unique;requied;fillable;word descr;text:nullable;;fillable;paragraph due;timestamp;;fillable,date;date" --has-many="tags,tasks" --belongs-to="project,creator:User" --migration-file=create_task_categories');
|
$I->runShellCommand('php artisan wn:resource task_category "name;string:unique;requied;fillable;word descr;text:nullable;;fillable;paragraph due;timestamp;;fillable,date;date" --has-many="tags,tasks" --belongs-to="project,creator:User" --add=timestamps --migration-file=create_task_categories');
|
||||||
|
|
||||||
// Checking the model
|
// Checking the model
|
||||||
$I->seeInShellOutput('TaskCategory model generated');
|
$I->seeInShellOutput('TaskCategory model generated');
|
||||||
|
@ -6,7 +6,7 @@ class MigrationCommand extends BaseCommand {
|
|||||||
protected $signature = 'wn:migration
|
protected $signature = 'wn:migration
|
||||||
{table : The table name.}
|
{table : The table name.}
|
||||||
{--schema= : the schema.}
|
{--schema= : the schema.}
|
||||||
{--add= : specifies additional columns like softDeletes, rememberToken and nullableTimestamps.}
|
{--add= : specifies additional columns like timestamps, softDeletes, rememberToken and nullableTimestamps.}
|
||||||
{--keys= : foreign keys.}
|
{--keys= : foreign keys.}
|
||||||
{--file= : name of the migration file (to use only for testing purpose).}
|
{--file= : name of the migration file (to use only for testing purpose).}
|
||||||
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
||||||
@ -64,7 +64,7 @@ class MigrationCommand extends BaseCommand {
|
|||||||
{
|
{
|
||||||
$additionals = $this->option('add');
|
$additionals = $this->option('add');
|
||||||
if (empty($additionals)) {
|
if (empty($additionals)) {
|
||||||
$additionals = 'timestamps';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$additionals = explode(',', $additionals);
|
$additionals = explode(',', $additionals);
|
||||||
|
@ -12,6 +12,7 @@ class ModelCommand extends BaseCommand {
|
|||||||
{--belongs-to= : belongsTo relationships.}
|
{--belongs-to= : belongsTo relationships.}
|
||||||
{--belongs-to-many= : belongsToMany relationships.}
|
{--belongs-to-many= : belongsToMany relationships.}
|
||||||
{--rules= : fields validation rules.}
|
{--rules= : fields validation rules.}
|
||||||
|
{--timestamps=true : enables timestamps on the model.}
|
||||||
{--path=app : where to store the model php file.}
|
{--path=app : where to store the model php file.}
|
||||||
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
||||||
{--force= : override the existing files}
|
{--force= : override the existing files}
|
||||||
@ -31,7 +32,8 @@ class ModelCommand extends BaseCommand {
|
|||||||
'fillable' => $this->getAsArrayFields('fillable'),
|
'fillable' => $this->getAsArrayFields('fillable'),
|
||||||
'dates' => $this->getAsArrayFields('dates'),
|
'dates' => $this->getAsArrayFields('dates'),
|
||||||
'relations' => $this->getRelations(),
|
'relations' => $this->getRelations(),
|
||||||
'rules' => $this->getRules()
|
'rules' => $this->getRules(),
|
||||||
|
'additional' => $this->getAdditional()
|
||||||
])
|
])
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
@ -114,4 +116,11 @@ class ModelCommand extends BaseCommand {
|
|||||||
return implode(PHP_EOL, $rules);
|
return implode(PHP_EOL, $rules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getAdditional()
|
||||||
|
{
|
||||||
|
return $this->option('timestamps') == 'false'
|
||||||
|
? " public \$timestamps = false;" . PHP_EOL . PHP_EOL
|
||||||
|
: '';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -6,6 +6,7 @@ class PivotTableCommand extends BaseCommand {
|
|||||||
protected $signature = 'wn:pivot-table
|
protected $signature = 'wn:pivot-table
|
||||||
{model1 : Name of the first model or table}
|
{model1 : Name of the first model or table}
|
||||||
{model2 : Name of the second model or table}
|
{model2 : Name of the second model or table}
|
||||||
|
{--add= : specifies additional columns like timestamps, softDeletes, rememberToken and nullableTimestamps.}
|
||||||
{--file= : name of the migration file (to use only for testing purpose).}
|
{--file= : name of the migration file (to use only for testing purpose).}
|
||||||
{--force= : override the existing files}
|
{--force= : override the existing files}
|
||||||
';
|
';
|
||||||
@ -24,7 +25,8 @@ class PivotTableCommand extends BaseCommand {
|
|||||||
'--keys' => $this->keys(),
|
'--keys' => $this->keys(),
|
||||||
'--file' => $this->option('file'),
|
'--file' => $this->option('file'),
|
||||||
'--parsed' => false,
|
'--parsed' => false,
|
||||||
'--force' => $this->option('force')
|
'--force' => $this->option('force'),
|
||||||
|
'--add' => $this->option('add')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ class ResourceCommand extends BaseCommand {
|
|||||||
{--belongs-to= : belongsTo relationships.}
|
{--belongs-to= : belongsTo relationships.}
|
||||||
{--belongs-to-many= : belongsToMany relationships.}
|
{--belongs-to-many= : belongsToMany relationships.}
|
||||||
{--migration-file= : the migration file name.}
|
{--migration-file= : the migration file name.}
|
||||||
|
{--add= : specifies additional columns like timestamps, softDeletes, rememberToken and nullableTimestamps.}
|
||||||
{--path=app : where to store the model file.}
|
{--path=app : where to store the model file.}
|
||||||
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
||||||
{--force= : override the existing files}
|
{--force= : override the existing files}
|
||||||
@ -40,6 +41,7 @@ class ResourceCommand extends BaseCommand {
|
|||||||
'--rules' => $this->rules(),
|
'--rules' => $this->rules(),
|
||||||
'--path' => $this->option('path'),
|
'--path' => $this->option('path'),
|
||||||
'--force' => $this->option('force'),
|
'--force' => $this->option('force'),
|
||||||
|
'--timestamps' => $this->hasTimestamps() ? 'true' : 'false',
|
||||||
'--parsed' => true
|
'--parsed' => true
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -50,6 +52,7 @@ class ResourceCommand extends BaseCommand {
|
|||||||
'--keys' => $this->migrationKeys(),
|
'--keys' => $this->migrationKeys(),
|
||||||
'--file' => $this->option('migration-file'),
|
'--file' => $this->option('migration-file'),
|
||||||
'--force' => $this->option('force'),
|
'--force' => $this->option('force'),
|
||||||
|
'--add' => $this->option('add'),
|
||||||
'--parsed' => true
|
'--parsed' => true
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -180,4 +183,12 @@ class ResourceCommand extends BaseCommand {
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function hasTimestamps()
|
||||||
|
{
|
||||||
|
$additionals = explode(',', $this->option('add'));
|
||||||
|
return in_array('nullableTimestamps', $additionals)
|
||||||
|
|| in_array('timestamps', $additionals)
|
||||||
|
|| in_array('timestampsTz', $additionals);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,6 @@ class {{name}} extends Model {
|
|||||||
{{rules}}
|
{{rules}}
|
||||||
];
|
];
|
||||||
|
|
||||||
{{relations}}
|
{{additional}}{{relations}}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user