garder500 / sqliberty
简化SQL请求的包
1.0.5
2024-08-20 01:43 UTC
Requires
- php: >=8.0
- ext-pdo: *
README
安装
Composer
composer require garder500/sqliberty
使用
<?php require_once __DIR__ . '/vendor/autoload.php'; use SQLiberty\Database; $db = new Database("host","database","user","password","port");
文档
数据库
示例
<?php require_once __DIR__ . '/vendor/autoload.php'; use SQLiberty\Database; use SQLiberty\Schema; $db = new Database("host","database","user","password","port"); $users = $db->model(function(Schema $table){ $table->int("id"); $table->varchar("name"); $table->varchar("email"); $table->varchar("password"); $table->datetime("created_at"); $table->datetime("updated_at"); });
模型
模型是数据库中表的表示,您可以使用模型向数据库发出查询。
示例
模型的常规使用流程
<?php require_once __DIR__ . '/vendor/autoload.php'; use SQLiberty\Database; use SQLiberty\Schema; $db = new Database("host","database","user","password","port"); $users = $db->model(function(Schema $table){ $table->int("id"); $table->varchar("name"); $table->varchar("email"); $table->varchar("password"); $table->datetime("created_at"); $table->datetime("updated_at"); }); $user = $users->create([ "name" => "John Doe", "email" => "test@test.fr", "password" => "password", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s") ]); $user = $users->update([ "name" => "Jack Doe", ])->save();
模型代表数据库中的表,但您可以在模型中指定多个表,模型将能够在这张表之间进行查询。
<?php $users = $db->model("user",function(Schema $table){ $table->int("id"); $table->varchar("name"); $table->varchar("email"); $table->varchar("password"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->model("posts",function(Schema $table){ $table->int("id"); $table->varchar("title"); $table->varchar("content"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->belongTo("user"); $table->model("comments",function(Schema $table){ $table->int("id"); $table->varchar("content"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->belongTo("post"); }); }); }); $users->create([ "name" => "John Doe", "email" => "test@maiL.fr", "password" => "password", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), "posts" => [ [ "title" => "Post 1", "content" => "Content 1", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), "comments" => [ [ "content" => "Comment 1", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), ], [ "content" => "Comment 2", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), ] ] ], [ "title" => "Post 2", "content" => "Content 2", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), "comments" => [ [ "content" => "Comment 3", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), ], [ "content" => "Comment 4", "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s"), ] ] ] ] ]); // This will create 2 post with 2 comments each
您还可以指定表的唯一键,如果没有指定唯一键,模型将使用“id”关键字作为唯一键,如果没有指定“id”列,模型将不使用唯一键。
<?php $users = $db->model(function(Model $table){ $table->int("custom_id")->primaryKey()->autoIncrement(); $table->varchar("name"); $table->varchar("email"); $table->varchar("password"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->primaryKey("email"); });
findFirst/findAll以相同的方式工作,并且甚至是递归搜索!例如
<?php /** * Defining model */ $users = $db->model("user",function(Schema $table){ $table->int("id"); $table->varchar("name"); $table->varchar("email"); $table->varchar("password"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->model("posts",function(Schema $table){ $table->int("id"); $table->varchar("title"); $table->varchar("content"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->belongTo("user"); $table->model("comments",function(Schema $table){ $table->int("id"); $table->varchar("content"); $table->datetime("created_at"); $table->datetime("updated_at"); $table->belongTo("post"); }); }); }); $found = $db->findAll([ "posts" => [ [ "comments" => [ "content" => "Comment" ] ] ] ]) // The result will be All comment that "Contain" the word Comment.