Package Data | |
---|---|
Maintainer Username: | asamaru7 |
Package Create Date: | 2016-04-20 |
Package Last Update: | 2020-09-15 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-23 03:11:03 |
Package Statistics | |
---|---|
Total Downloads: | 39,757 |
Monthly Downloads: | 138 |
Daily Downloads: | 3 |
Total Stars: | 1 |
Total Watchers: | 4 |
Total Forks: | 6 |
Total Open Issues: | 2 |
Eloquent Model Generator is a tool based on Code Generator for generating Eloquent models.
Step 1. Add Eloquent Model Generator to your project:
composer require asamaru7/eloquent-model-generator-for-lumen
Step 2. Register GeneratorServiceProvider
:
$app->register(Krlove\EloquentModelGenerator\Provider\GeneratorServiceProvider::class);
Step 3. Configure your database connection.
Use
php artisan krlove:generate:model User
to generate a model class. Generator will look for table with name users
and generate a model for it. You can specify another table name by supplying table-name
option:
php artisan krlove:generate:model User --table-name=user
In this case generated model will contain protected $table = 'user'
property.
Generated file will be saved into app
directory of your application and have App
namespace. If you want to change the destination and namespace, supply the output-path
and namespace
options respectively:
php artisan krlove:generate:model User --output-path=/full/path/to/output/directory --namespace=Some\\Other\\NSpace
By default generated class will be extended from Illuminate\Database\Eloquent\Model
. To change the base class specify base-class-name
option:
php artisan krlove:generate:model User --base-class-name=Some\\Other\\Base\\Model
There are several useful options for defining several model's properties:
no-timestamps
- adds public $timestamps = false;
property to the modeldate-format
- specifies dateFormat
property of the modelconnection
- specifies connection name property of the modelInstead of spcifying options each time when executing the command you can create a config file with your own default values and pass it by specifying config
option. Generator already contains its own config file at Resources/config.php
:
<?php
return [
'namespace' => 'App',
'base_class_name' => \Illuminate\Database\Eloquent\Model::class,
'output_path' => null,
'no_timestamps' => null,
'date_format' => null,
'connection' => null,
];
Its values can be overrided by your own config (e.g. <your-base-dir>/config/eloquent_model_generator.php
):
<?php
return [
'namespace' => 'Some\\Other\\Namespace',
'base_class_name' => 'Some\\Other\\ClassName',
'output_path' => '/full/path/to/output/directory',
'no_timestamps' => true,
'date_format' => 'U',
'connection' => 'other-connection',
];
php artisan krlove:generate:model User --config=<your-base-dir>/config/eloquent_model_generator.php
Table user
:
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`role_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `role_id` (`role_id`),
CONSTRAINT `user_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Command:
php artisan krlove:generate:model User --table-name=user
Result:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* @property int $id
* @property int $role_id
* @property mixed $username
* @property mixed $email
* @property Role $role
* @property Article[] $articles
* @property Comment[] $comments
*/
class User extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'user';
/**
* @var array
*/
protected $fillable = ['role_id', 'username', 'email'];
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function role()
{
return $this->belongsTo('Role');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function articles()
{
return $this->hasMany('Article');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function comments()
{
return $this->hasMany('Comment');
}
}