alvin0/database-json-laravel

使用Laravel创建和管理JSON数据库

2.1.2 2021-05-05 16:43 UTC

This package is auto-updated.

Last update: 2024-09-06 11:03:40 UTC


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_atupdated_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