lelemad/database-json-laravel

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

v1.0.0 2023-12-27 08:07 UTC

This package is not auto-updated.

Last update: 2024-10-03 10:30:24 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 选项将创建带有更新表方法的迁移。

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: 删除所有表并 up --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 外键默认为相关表的主键
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 属性的访问器。访问器将由 Eloquent 自动调用,以检索 first_name 属性的值。

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