tamedevelopers / database
轻量级PHP ORM数据库模型。
5.0.10
2024-08-07 01:31 UTC
Requires
- php: >=8.0
- tamedevelopers/support: *
This package is auto-updated.
Last update: 2024-09-07 01:43:17 UTC
README
灵感
在被介绍学习Laravel框架后;在过去的几年里,回归纯PHP确实有些困难。因此,我决定创建一种更简单的方式来与数据库通信,使用本地的PHP PDO:: Driver
。
文档
- 要求
- 安装
- 实例化
- Init.php文件
- 引导加载器
- 数据库连接
- 数据库断开连接
- 应用调试环境变量
- 更多数据库连接键
- 用法
- 获取数据
- 集合
- 分页
- 子句
- 数据库迁移
- 获取数据库配置
- 获取数据库连接
- 获取数据库名称
- 获取数据库PDO
- 获取数据库表前缀
- 数据库导入
- 更新环境变量
- 自动加载注册
- 校对和字符集
- 扩展模型类
- 辅助函数
- 错误输出
- 错误状态
- 有用的链接
要求
>= php 8.0+
安装
在安装database包
之前,获取PHP依赖关系管理器Composer,因为它将简化安装。
composer require tamedevelopers/database
实例化
步骤 1 — 需要composer自动加载
require_once __DIR__ . '/vendor/autoload.php';
步骤 2 — 调用以下方法(),并在浏览器中运行一次
- 这将自动设置您的整个应用,一触即发!
use Tamedevelopers\Database\AutoLoader;
AutoLoader::start();
- 或 --
辅助函数
autoloader_start();
Init.php文件
- [可选] 这将扩展
composer自动加载
和其他设置
引导加载器
- 如果您不想包括或使用
init.php
文件- 您只需要调用引导加载器,以启动您的应用程序。
use Tamedevelopers\Database\Capsule\AppManager;
AppManager::bootLoader();
- 或 --
辅助函数
app_manager()->bootLoader();
数据库连接
- 您可以选择连接到多个数据库
- 首先导航到[config/database.php]文件并添加配置
- 需要两个参数
key
作为字符串
和数组
[可选]
DB::connection('connName', [optional]);
数据库断开连接
- 如果您想连接到已连接的数据库,您首先需要断开连接
- 需要一个参数作为
字符串
- 需要一个参数作为
DB::disconnect('connName');
数据库重新连接
- 与
数据库连接
相同
DB::reconnect('connName', [optional]);
应用调试环境变量
.env
文件中包含一个名为APP_DEBUG
的键- 在生产环境中必须设置为false
- 这有助于保护您的应用程序并退出错误404
- 而不是显示整个服务器错误。
更多数据库连接键
- 所有可用的连接键
- DB_CONNECTION 只使用
mysql
- 目前不支持其他连接类型。
- DB_CONNECTION 只使用
用法
- 所有使用方法
表
- 接受一个参数作为
string
table_name
$db->table('users');
插入
- 接受一个作为关联数组的参数
column_name => value
- 在成功或错误时返回一个对象
$db->table('users')->insert([
'user_id' => 10000001,
'first_name' => 'Alfred',
'last_name' => 'Pete',
'wallet_bal' => 0.00,
'registered' => strtotime('now'),
]);
-- To see data, you need to save into a variable
插入或忽略
- 与
insert()
方法相同- 在错误时返回创建数据的对象或
false
- 在错误时返回创建数据的对象或
$db->table('users')->insertOrIgnore([
'user_id' => 10000001,
'first_name' => 'Alfred',
]);
更新
- 接受一个作为关联数组的参数
column_name => value
- 返回受影响的行数
int
或错误
- 返回受影响的行数
$db->table('users')
->where('user_id', 10000001)
->update([
'first_name' => 'Alfred C.',
]);
更新或忽略
- 与
update()
方法相同- 返回受影响的行数
int
或错误时的0
- 返回受影响的行数
$db->table('users')
->where('user_id', 10000001)
->updateOrIgnore([
'first_name' => 'Alfred C.',
]);
删除
- 返回一个
int
$db->table('users')
->where('user_id', 10000001)
->delete();
增加
- 接受三个参数
- 只有第一个参数是必需的
默认情况下,如果未传递第二个参数,则将递增 1
$db->table('users')
->where('user_id', 10000001)
->increment('wallet_bal');
$db->table('users')
->where('user_id', 10000001)
->increment('wallet_bal', 10);
- 您还可以传递第二个或第三个参数以更新其他列
$db->table('users')
->where('user_id', 10000001)
->increment('wallet_bal', 100.23, [
'first_name' => 'F. Peterson',
'status' => 1,
]);
- 您可以选择不传递第二个参数,它将自动被视为更新参数(如果是一个数组)
$db->table('users')
->where('user_id', 10000001)
->increment('wallet_bal', [
'first_name' => 'F. Peterson',
'status' => 1,
]);
减少
- 与增量相同
$db->table('users')
->where('user_id', 10000001)
->decrement('wallet_bal', [
'first_name' => 'F. Peterson',
'status' => 1,
]);
获取数据
GET
$db->table('users')->get();
第一个
$db->table('users')->first();
第一个或创建
-
接受两个参数作为
array
- 必须的
$conditions
参数作为array
- 可选的
$data
参数作为array
- 必须的
-
首先检查检索数据条件。如果失败,则将
$conditions
与$data
值合并以创建新记录
$db->table('users')->firstOrCreate(
['email' => 'example.com']
);
- 或 -
示例 2
$db->table('users')->firstOrCreate(
['email' => 'example.com'],
[
'country' => 'Nigeria',
'age' => 18,
'dob' => 2001,
]
);
第一个或失败
- 与
first()
方法相同,但如果找不到数据则退出错误代码 404
$db->table('users')->firstOrFail();
计数
$db->table('users')->count();
分页
- 接受参数
int
$per_page
- 默认情况下,如果没有给出任何参数,则每页显示 10 个
$users = $db->table('users')
->paginate(40);
$users // this will return the data objects
$users->links() // this will return the paginations links view
$users->showing() // Display items of total results
存在
- 返回布尔值
true \| false
$db->table('users')
->where('email', 'email@gmail.com')
->orWhere('name', 'Mandison')
->exists();
表存在
- 接受参数
string
$table_name
$db->tableExists('users');
集合
- 您可以直接在任何以下内容上使用
Collections 实例
的methods
- 所有以下
methods
都是由Collection
class
接收的
- get()
- find()
- first()
- firstOrIgnore()
- firstOrCreate()
- firstOrFail()
- insert()
- insertOrIgnore()
- 所有以下
集合方法
集合用法
- 在所有数据库检索请求上自动调用 Colections
- 这样,您可以以
object\|array
键属性访问数据 - 如果没有找到数据,则仅在
->first()
方法上返回 null
- 这样,您可以以
$user = $db->tableExists('users')
->first();
if($user){
$user->first_name
$user['first_name']
}
$user->toArray()
$user->getAttributes()
- 示例二(2)
->get() \| ->paginate()
请求
$users = $db->tableExists('users')
->where('is_active', 1),
->random(),
->get();
if($users->isNotEmpty()){
foreach($users as $user){
$user->first_name
$user['first_name']
$user->toArray()
$user->getAttributes()
}
}
分页
- 配置分页
全局配置
- 1 在 ENV 自动启动时设置全局分页
最受欢迎的方法
AutoLoader::configPagination([
'allow' => true,
'prev' => 'Prev Page',
'last' => 'Last Page',
'next' => 'Next Page',
'view' => 'bootstrap',
'class' => 'Custom-Class-Css-Selector',
]);
- 或 --
辅助函数
config_pagination([
'allow' => true,
]);
分页查询
$users = $db->table('users')->paginate(40);
分页数据
$users
// This will return `Collections` of pagination data
分页链接
$users->links();
// This will return pagination links view
分页链接配置
阅读更多...
- 您可以直接配置分页链接
- 注意:如果
configPagination()
allow
设置为true
- 它将覆盖所有其他设置
- 注意:如果
$users->links([
'first' => 'First Page',
'last' => 'Last Page',
'prev' => 'Previous Page',
'next' => 'Next Page',
])
分页显示
$users->showing();
// This will create a span html element with text
<span class='page-span'>
Showing 0-40 of 500 results
</span>
分页显示配置
阅读更多...
- 您还可以直接配置显示文本
$users->showing([
'showing' => 'Showing',
'of' => 'out of',
'results' => 'Results',
'span' => 'css-selector',
])
分页显示数字
- 页码从 1 开始计数
- 这将格式化所有分页项集合
- 在每一页上,它从上一个分页项编号开始计数
$users = $db->table('users')->paginate(20);
foreach($users as $user){
echo $user->numbers();
}
获取分页
- 返回分页信息
$users = $db->table('users')->paginate(20);
$users->getPagination();
子句
- 多个子句
查询
- 允许使用直接
SQL 查询语法
- 或直接查询 exec()
$db->query("SHOW COLUMNS FROM users")
->limit(10)
->get();
$db->query("ALTER TABLE `langs` ADD COLUMN es TEXT; UPDATE `langs` SET es = en;")
->exec();
Select
- 用于从数据库中选择所需的列
$db->table('users')
->where('user_id', 10000001)
->select(['first_name', 'email'])
->select('email, 'name')
->first();
排序
- 接受两个参数
$column
和$direction
- 默认情况下,
$direction
参数设置为ASC
- 默认情况下,
$db->table('wallet')
->orderBy('date', 'DESC')
->get();
排序原生的
- 接受一个参数
$query
$db->table('wallet')
->orderByRaw('CAST(`amount` AS UNSIGNED) DESC')
->get();
最新
- 默认情况下,接受一个参数
$column
,使用的列是id
$db->table('wallet')
->latest('date')
->get();
最旧
- 默认情况下,接受一个参数
$column
,使用的列是id
$db->table('wallet')
->oldest()
->get();
随机排序
$db->table('wallet')
->inRandomOrder()
->get();
随机
阅读更多...
- 与
inRandomOrder()
相同
$db->table('wallet')
->random()
->get();
限制
- 接受一个参数
$limit
作为 int。默认值是1
$db->table('wallet')
->limit(10)
->get();
偏移
阅读更多...
- 接受一个参数
$offset
作为 int。默认值是0
$db->table('wallet')
->limit(3)
->offset(2)
->get();
- 示例 2(仅提供偏移量将返回 LIMIT 而不出现错误)
$db->table('wallet')
->offset(2)
->get();
连接
- 包括
join
|leftJoin
|rightJoin
|crossJoin
$db->table('wallet')
->join('users', 'users.user_id', '=', 'wallet.user_id')
->get();
- 或
$db->table('wallet')
->join('users', 'users.user_id', '=', 'wallet.user_id')
->where('wallet.email', 'example.com')
->orWhere('wallet.user_id', 10000001)
->paginate(10);
左连接
- 与
join
相同
$db->table('wallet')
->leftJoin('users', 'users.user_id', '=', 'wallet.user_id')
->where('wallet.email', 'example.com')
->get();
条件
- 接受三个参数
- 只有第一个参数是必需的
$db->table('wallet')
->where('user_id', 10000001)
->where('amount', '>', 10)
->where('balance', '>=', 100)
->get();
或条件
阅读更多...
- 与 Where 子句相同
$db->table('wallet')
->where('user_id', 10000001)
->where('amount', '>', 10)
->orWhere('first_name', 'like', '%Peterson%')
->where('amount', '<=', 10)
->get();
条件原生的
- 允许您使用直接
SQL 查询语法
$date = strtotime('next week');
$db->table("tb_wallet")
->whereRaw("NOW() > created_at")
->whereRaw("date >= ?", [$date])
->where(DB::raw("YEAR(created_at) = 2022"))
->where('email', 'email@gmail.com')
->limit(10)
->random()
->get();
条件列
- 接受三个参数
column
operator
column2
$db->table('wallet')
->where('user_id', 10000001)
->whereColumn('amount', 'tax')
->whereColumn('amount', '<=', 'balance')
->get();
条件为空
- 接受一个参数
column
$db->table('wallet')
->where('user_id', 10000001)
->whereNull('email_status')
->get();
条件不为空
阅读更多...
- 接受一个参数
column
$db->table('wallet')
->where('user_id', 10000001)
->whereNotNull('email_status')
->get();
条件在范围内
- 接受两个参数
column
作为字符串param
作为数组- 不支持浮点值
$db->table('wallet')
->where('user_id', 10000001)
->whereBetween('amount', [0, 100])
->get();
条件不在范围内
阅读更多...
- 与
whereBetween()
方法相同
$db->table('wallet')
->where('user_id', 10000001)
->whereNotBetween('amount', [0, 100])
->get();
条件在多个值中
- 接受两个参数
column
作为字符串param
作为数组- 不支持浮点值
$db->table('wallet')
->where('user_id', 10000001)
->whereIn('amount', [10, 20, 40, 100])
->get();
条件不在多个值中
阅读更多...
与 whereIn()
方法相同
$db->table('wallet')
->where('user_id', 10000001)
->whereNotIn('amount', [10, 20, 40, 100])
->get();
分组
- 接受一个参数
$column
$db->table('wallet')
->where('user_id', 10000001)
->groupBy('amount')
->get();
数据库迁移
- 类似于Laravel数据库迁移
仅为使数据库表创建更加容易
use Tamedevelopers\Database\Migrations\Migration;
创建表架构
- 接受参数为
表名
- 第二个参数
字符串
jobs|sessions
(可选)- 如果传递,将创建一个虚拟的jobs|sessions
表模式
- 第二个参数
Migration::create('users');
Migration::create('users_wallet');
Migration::create('tb_jobs', 'jobs');
Migration::create('tb_sessions', 'sessions');
Table `2023_04_19_1681860618_user` has been created successfully
Table `2023_04_19_1681860618_user_wallet` has been created successfully
Table `2023_04_19_1681860618_tb_jobs` has been created successfully
Table `2023_04_19_1681860618_tb_sessions` has been created successfully
- 或 --
辅助函数
migration()->create('users');
默认字符串长度
- 在某些情况下,您可能希望设置所有迁移表的默认字符串长度
use Tamedevelopers\Database\Migrations\Schema;
Schema::defaultStringLength(200);
- 或 --
辅助函数
schema()->defaultStringLength(2000);
更新列默认值
- 在某些情况下,您可能希望更新默认列的值
- 是的!借助Schema,这是非常可能的。需要三个(3)个参数
$tablename
作为字符串$column_name
作为字符串$values
作为混合数据NULL
NOT NULL\|None
STRING
current_timestamp()
use Tamedevelopers\Database\Migrations\Schema;
Schema::updateColumnDefaultValue('users_table', 'email_column', 'NOT NULL);
Schema::updateColumnDefaultValue('users_table', 'gender_column', []);
or
schema()->updateColumnDefaultValue('users_table', 'gender_column', []);
运行迁移
- 这将执行并运行位于 [root/database/migrations] 的文件中的迁移
Migration::run();
or
migration()->run();
Migration runned successfully on `2023_04_19_1681860618_user`
Migration runned successfully on `2023_04_19_1681860618_user_wallet`
删除迁移
阅读更多...
- 请注意,这将执行并删除位于迁移中的所有文件表
- [可选参数]
bool
用于强制删除表
Migration::drop();
or
migration()->drop(true);
删除表
阅读更多...
- 接受一个参数
string
$table_name
use Tamedevelopers\Database\Migrations\Schema;
Schema::dropTable('table_name');
or
schema()->dropTable('table_name');
删除列
阅读更多...
- 要删除列
需要两个参数
- 这将删除可用的列
use Tamedevelopers\Database\Migrations\Schema;
Schema::dropColumn('table_name', 'column_name');
or
schema()->dropColumn('table_name', 'column_name');
获取数据库配置
$db->getConfig()
获取数据库连接
$db->dbConnection()
- 或 --
辅助函数
db_connection();
获取数据库名称
$db->getDatabaseName()
获取数据库PDO
$db->getPDO()
获取数据库表前缀
$db->getTablePrefix()
数据库导入
- 您可以使用此类以编程方式将 .sql 导入到数据库中
- 请记住,系统已经具有对您项目的绝对路径
use Tamedevelopers\Database\DBImport;
$database = new DBImport();
// needs absolute path to database file
$status = $database->import('path_to/orm.sql');
- Status code
->status == 404 (Failed to read file or File does'nt exists
->status == 400 (Query to database error
->status == 200 (Success importing to database
- 或 --
辅助函数
import('path_to/orm.sql');
更新环境变量
- 您可以使用此类以编程方式将 .sql 导入到数据库中
use Tamedevelopers\Support\Env;
Env::updateENV('DB_PASSWORD', 'newPassword');
Env::updateENV('APP_DEBUG', false);
Env::updateENV('DB_CHARSET', 'utf8', false);
Returns - Boolean
true|false
- 或 --
辅助函数
env_update('DB_CHARSET', 'utf8', false);
校对和字符集
- 校对和字符集数据
列表
校对
- utf8_bin
- utf8_general_ci
- utf8mb4_bin
- utf8mb4_unicode_ci
- utf8mb4_general_ci
- latin1_bin
- latin1_general_ci
字符集
- utf8
- utf8mb4
- latin1
扩展模型类
阅读更多...
- 您还可以直接从其他类扩展DB模型类
use Tamedevelopers\Database\Model;
class Post extends Model{
// define your custom model table name
protected $table = 'posts';
-- You now have access to the DB public instances
public function getPost(){
return $this->select(['images', 'title', 'description'])->get();
}
}
辅助函数
错误输出
错误状态
- 在出错时返回
404
状态码 - 在成功时返回
200
状态码
有用链接
- @作者 Fredrick Peterson (Tame Developers)
- 如果您喜欢这个PHP库,您可以为 Tame Developers 购买一杯咖啡
- 轻量级 - PHP ORM 数据库
- 支持 - 库