ametsuramet/simple_orm

用于在 Laravel 中构建简单 ORM 的数据库包装器

v1.2.6 2017-08-10 10:49 UTC

This package is auto-updated.

Last update: 2024-09-24 17:19:07 UTC


README

Laravel Eloquent ORM 的替代品。

安装

首先,通过 Composer 拉取此包。

composer require ametsuramet/simple_orm:1.2.*

或手动在 composer.json 文件的 require 键中添加

"ametsuramet/simple_orm": "1.2.*"

config/app.php 中注册 ServiceProvider

'providers' => [
    // ...
    Amet\SimpleORM\ModelBuilderServiceProvider::class,
],

对于 Lumen

将此服务提供者添加到您的 bootstrap/app.php 文件中。

$app->register(Amet\SimpleORM\ModelBuilderServiceProvider::class);

定义模型

创建模型实例的最简单方法是使用 simple_orm:model Artisan 命令

php artisan simple_orm:model Project

或者您可以使用交互模式

php artisan simple_orm:interactive

命令选项

php artisan simple_orm:model Project --soft_delete=1 --methods=transactions,users --default_key=uuid --migration=1

所有模型都将放置在 app/ORM 文件夹中。

用法

在您的控制器文件中

// ...

use App\ORM\Project;

class yourController extends Controller {
	
	public function yourMethod()
	{
		$projects = new Project;
		$projects = $projects->get();

		dd($projects);
	}
// ...

或者像这样

// ...
		$projects = (new Project)->get();
		dd($projects);
// ...

表名

默认情况下,SimpleORM 会生成 $table 属性,但您可以在模型中更改表名

...
class Project extends BaseQuery
{
	protected $table = 'projects';
...

默认键

SimpleORM 还会假设每个表都有一个名为 id 的主键列。您可以使用 $default_key 属性来覆盖。

...
class Project extends BaseQuery
{
	protected $default_key = 'uuid';
...

公开方法

where((array) $params)

// ...
		$projects = new Project;
		$projects = $projects->where(['id',1])->get();
		dd($projects);
// ...

或者

// ...
		$wheres = [
			['id','>=',10], 
			['date','>=','2017-01-01'], 
		];
		$projects = new Project;
		$projects = $projects->where($wheres)->get();
		dd($projects);
// ...

limit((int) $params, (int) $params)

// ...
		$projects = new Project;
		$projects = $projects->limit(10)->get();
		dd($projects);
// ...

您可以添加偏移量

// ...
		$projects = new Project;
		$projects = $projects->limit(20,10)->get();
		dd($projects);
// ...

deleted_only()

仅显示已删除的

// ...
		$projects = new Project;
		$projects = $projects->deleted_only()->get();
		dd($projects);
// ...

deleted((boolean) $params)

如上所述,软删除的模型将自动从查询结果中排除,您可以使用此方法包括已删除的记录

// ...
		$projects = new Project;
		$projects = $projects->deleted(true)->get();
		dd($projects);
// ...

info()

// ...
		$projects = new Project;
		$projects = $projects->info();
		dd($projects);
// ...

orderBy((string) $params, (string) $params)

// ...
		$projects = new Project;
		$projects = $projects->orderBy('id')->get();
		dd($projects);
// ...

或者

// ...
		$projects = new Project;
		$projects = $projects->orderBy('id','desc')->get();
		dd($projects);
// ...

groupBy()

// ...
		$projects = new Project;
		$projects = $projects->groupBy('id')->get();
		dd($projects);
// ...

或者

// ...
		$projects = new Project;
		$projects = $projects->groupBy(['id','date'])->get();
		dd($projects);
// ...

insert((array) $params)

// ...
		$projects = new Project;
		$projects = $projects->insert(["name" => 'new project']);
		dd($projects);
// ...

update($id,(array) $params)

// ...
		$projects = new Project;
		$projects = $projects->update(29,["name" => 'new project']);
		dd($projects);
// ...

delete($id)

// ...
		$projects = new Project;
		$projects = $projects->delete(29);
// ...

get()

// ...
		$projects = new Project;
		$projects = $projects->get();
		dd($projects);
// ...

first()

// ...
		$projects = new Project;
		$projects = $projects->first();
		dd($projects);
// ...

find($id)

// ...
		$projects = new Project;
		$projects = $projects->find(29);
		dd($projects);
// ...

last()

// ...
		$projects = new Project;
		$projects = $projects->last();
		dd($projects);
// ...

paginate((int) $params)

// ...
		$projects = new Project;
		$projects = $projects->paginate($params);
		dd($projects);
// ...

set_show_column((array) $params)

// ...
		$projects = new Project;
		$projects = $projects->set_show_column(['id','first_name','last_name'])->get();
		dd($projects);
// ...

hide_relation()

// ...
		$projects = new Project;
		$projects = $projects->hide_relation()->get();
		dd($projects);
// ...

count()

// ...
		$projects = new Project;
		$projects = $projects->count();
		dd($projects);
// ...

getQueryLog()

// ...
		$projects = new Project;
		$projects = $projects->getQueryLog();
		dd($projects);
// ...

关系

hasOne($relation_table,$relation_key,$table_key,$relation_name,$show_column(optional))

...
class Project extends BaseQuery
{
	public function user()
	{
		$this->hasOne(User:class,'id','user_id','user');
	}
...

带有 show_column

...
class Project extends BaseQuery
{
	public function user()
	{
		$this->hasOne(User:class,'id','user_id','user',['id','first_name','last_name']);
	}
...

hasMany($relation_table,$relation_key,$table_key,$relation_name,$show_column(optional))

...
class Project extends BaseQuery
{
	public function user()
	{
		$this->hasOne(User:class,'id','user_id','user');
	}
...

带有 show_column

...
class Project extends BaseQuery
{
	public function user()
	{
		$this->hasOne(User:class,'id','user_id','user',['id','first_name','last_name']);
	}
...

manyToMany($relation_table,$relation_key,$table_key,$relation_name,$pivot_table,$show_column(optional))

...
class Project extends BaseQuery
{
	public function user()
	{
		$pivot_table = [UserProject::class,'user_id','company_id'];
		$this->manyToMany(User:class,'id','user_id','user',$pivot_table);
	}
...

带有 show_column

...
class Project extends BaseQuery
{
	public function user()
	{
		$pivot_table = [UserProject::class,'user_id','company_id'];
		$this->manyToMany(User:class,'id','user_id','user',$pivot_table,['id','first_name','last_name']);
	}
...