alvin0 / database-json-laravel
使用Laravel创建和管理JSON数据库
Requires
- php: ^7.2|^8.0
Requires (Dev)
- phpunit/phpunit: ^4.5.1
- phpunit/phpunit-skeleton-generator: ^2.0.1
README
Database Json Laravel - 基于JSON文件的PHP扁平文件数据库库。功能受Eloquent启发。
要求
-
PHP 7.2.5+
-
Composer
安装
您可以通过composer安装此包
composer require alvin0/database-json-laravel
可选:服务提供者将自动注册。或者您也可以手动在您的config/app.php
文件中添加服务提供者
'providers' => [
// ...
DatabaseJson\DataBaseJsonServiceProvider::class,
];
您应该发布config/databasejson.php
配置文件。
表文件结构
table_name.data.json
- 包含数据的表文件 table_name.config.json
- 包含配置的表文件
基本用法
I. 使用命令行创建模型和迁移
1. 模型
创建模型
php artisan databasejson:model User -m
可选
-m : Generate a migrate for the given model.
-f : Create the class even if the model already exists
代码生成
namespace App\DatabaseJson\Models; use DatabaseJson\Model; class User extends Model { }
2. 迁移
2.1 创建迁移表
php artisan databasejson:migration user --table=users
代码生成
namespace App\DatabaseJson\Migrations; use DatabaseJson\DatabaseJson; use DatabaseJson\Migration; class CreateTableUserMigrateMigrate extends Migration { /** * How to create table * * DatabaseJson::table('NameTable',array( * {field_name} => {field_type} More information about field types and usage in PHPDoc * )); */ /** * Run the migrations. * * @return void */ public function up() { DatabaseJson::create('users', array( 'name' => 'string', 'old' => 'integer', 'created_at' => 'string', 'updated_at' => 'string', )); } }
可选
也可以使用--table选项来指定表名。使用--update选项将创建带有update table方法的迁移。
2.2 更新迁移表
更新仅支持在表中添加或删除列
如果您想删除表,请在函数up()中使用此方法。
DatabaseJson::remove('table_name');
示例创建迁移类型更新
php artisan databasejson:migration user --table="users" --update
代码生成
namespace App\DatabaseJson\Migrations; use DatabaseJson\DatabaseJson; use DatabaseJson\Migration; class CreateTableUserMigrateMigrate extends Migration { /** * Run the migrations. * * @return void */ public function up() { DatabaseJson::table('users')->addFields([ //'name' => 'string' //{field_name} => {field_type} More information about field types and usage in PHPDoc ]); //DatabaseJson::table('users')->deleteFields([ //'name', //{field_name} //]); } }
2.3 运行迁移
php artisan databasejson:migrate
可选
--fresh : 删除所有表并上 --path : 指定路径
II. 基本用法
1. 模型约定
默认情况下,模型期望在您的表上存在created_at
和updated_at
列。如果您不希望模型自动管理这些列,请在您的模型中将$timestamps
属性设置为false
namespace App\DatabaseJson\Models; use DatabaseJson\Model; class User extends Model { /** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false; }
2. 插入、更新和删除模型
2.1 插入
要创建数据库中的新记录,创建一个新的模型实例,设置模型上的属性,然后调用save
或使用静态函数create
方法。
use App\DatabaseJson\Models\User; $user = new User; $user->name = 'alvin'; $user->old = 27; $user->save();
示例
use App\DatabaseJson\Models\User; $user = User::create([ 'name' => 'alvin', 'old' => 27 ]);
2.2 更新
要创建数据库中的新记录,创建一个新的模型实例,设置模型上的属性,然后调用save
或使用静态函数create
方法。
use App\DatabaseJson\Models\User; $user = new User; $user->id = 1; $user->name = 'alvin'; $user->old = 27; $user->save();
示例
use App\DatabaseJson\Models\User; $id = 1; $user = User::update([ 'name' => 'alvin', 'old' => 28 ],$id);
2.3 删除
使用约束删除数据
use App\DatabaseJson\Models\User; $id = 1; $user = User::where('name','alvin')->delete(); $userById = User::find(1)->delete();
删除表中的所有数据
use App\DatabaseJson\Models\User; $id = 1; $user = User::delete();
3. 检索模型
all() -> This is a static function used to retrieve all objects in the model.
find($id) -> This is a static function used to retrieve an object by id in the model.
添加额外约束
您可以在查询中添加约束,然后使用get()
或paginate($perpage)
方法检索结果。
where() - filter records ( Standard operators =, !=, >, <, >=, <=, like )
orWhere() - other type of filtering results.
orderBy() - sort rows by key in order, can order by more than one field (just chain it).
groupBy() - group rows by field.
示例
- 使用
all()
检索结果
use App\DatabaseJson\Models\User; $users = User::all();
- 使用
get()
检索结果
use App\DatabaseJson\Models\User; $users = User::where('name','alvin') ->where('old', '>=', 18) ->get();
- 使用
paginate($perpage)
检索结果
use App\DatabaseJson\Models\User; $users = User::paginate(10);
- 添加约束
use App\DatabaseJson\Models\User; $users = User::where('old', '>=', 18)->paginate(10);
4 关系
4.1 设置关系
应用时存在两种关系:belongsTo和hasMany
local_key默认为id
- belongsTo的外键默认为关联表的
primaryKey
return $this->belongsTo('App\DatabaseJson\Models\User', 'local_key', 'foreign_key');
namespace App\DatabaseJson\Models; use DatabaseJson\Model; class Blog extends Model { public function user() { $this->belongsTo(User::class); } }
- hasMany
return $this->hasMany('App\DatabaseJson\Models\Blog', 'foreign_key', 'local_key');
namespace App\DatabaseJson\Models; use DatabaseJson\Model; class User extends Model { public function blogs() { return $this->hasMany(Blog::class, 'user_id'); } }
4.2 检索关系
- belongsTo
//return model App\DatabaseJson\Models\User $userBlog = Blog::find(1)->user
- hasMany
//return Illuminate\Support\Collection $blogsByUser = User::find(1)->blogs
- 当使用
with()
函数检索时,将追加关系数据到模型结果中
$users = User::with('blogs')->where('id', 1)->get();
5 创建访问器
5.1 定义访问器
要定义一个访问器,在您的模型上创建一个名为getFooAttribute的方法,其中Foo是您要访问的列的“studly”大小写名称。在这个例子中,我们将为first_name属性定义一个访问器。访问器将在尝试检索first_name属性值时自动被Eloquent调用
<?php namespace App; namespace App\DatabaseJson\Models; class User extends Model { /** * Get the user's first name. * * @param string $value * @return string */ public function getFirstNameAttribute($value) { return ucfirst($value); } }
如您所见,列的原始值传递给访问器,允许您操作并返回值。要访问访问器的值,您可以在模型实例上访问 first_name 属性
$user = \App\DatabaseJson\Models\User::find(1); $firstName = $user->first_name;
5.2 添加值
在创建访问器之后,将属性名称添加到模型的 appends 属性上。请注意,尽管访问器使用的是“驼峰式”命名,但属性名称通常以“下划线命名法”引用
<?php namespace App; namespace App\DatabaseJson\Models; class User extends Model { /** * The accessors to append to the model's array form. * * @var array */ protected $appends = ['first_name']; }
描述
更多信息请参考 PHPDoc,我认为它文档得很好。
这是一个来自 Lazer-Database 项目的开发项目::link https://github.com/Greg0/Lazer-Database