fizzday / fizzdb
一个小巧而强大的PHP路由器,类似于Laravel,用于Fizzday PHP框架,也可用于任何使用Composer构建或遵循PSR标准的PHP框架
dev-master
2018-01-01 11:30 UTC
Requires
- fizzday/fizzhelper: dev-master
This package is not auto-updated.
Last update: 2024-09-15 04:47:36 UTC
README
小巧强悍的PHP ORM,简单易用,支持数据库主从,读写分离,支持临时链接任意数据库操作,底层采用PDO连接,语法模仿Laravel的DB操作,参考文档
安装
使用composer
composer require fizzday/fizzdb dev-master
配置
<?php $config['db_default'] = 'mysql'; $config['mysql'] = [ 'driver' => 'mysql', 'host' => 'localhost', 'port' => 3306, 'database' => 'fizzday', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]; $config['mysql2'] = [ 'driver' => 'mysql', 'host' => '192.168.200.248', 'port' => 3306, 'database' => 'wcc_service_fooddrug', 'username' => 'gcore', 'password' => 'gcore', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => 'fd_', 'read' => [ 'host' => '192.168.200.248', 'database' => 'wcc_service_fooddrug', ], 'write' => [ 'host' => '192.168.200.248', 'database' => 'wcc_service_fooddrug', ] ]; return $config;
用法示例
连接数据库
<?php use Fizzday\FizzDB\DB; $config = require CONF_PATH.'database.php'; $db = DB::connection($config[$config['db_default']]); $userinfo = $db->table('user')->first(); // select * from user limit 1;
说明: 这里是将数据库的配置文件写入了配置目录(CONF_PATH)下的database.php
,可以配置多个数据库连接,只需在db_default
下指定连接名字即可.
如果想直接使用,则直接将配置数据传入 connection()
方法即可
基本用法
此处默认已将配置写入配置文件
<?php use Fizzday\FizzDB\DB; // 原生语句(查询) DB::query("SELECT * FROM `user` where `id`>?", [1]); // pdo用法 // 或者 DB::query("SELECT * FROM `user` where `id`>1"); // 原生语句(非查询) DB::execute("UPDATE `user` SET `age`=?", [25]); // pdo用法 // 或者 DB::execute("UPDATE `user` SET `age`=25");
链式操作
<?php use Fizzday\FizzDB\DB; // 链式操作 DB::table('user')->where('id', 1)->where(['name'=>1])->first(); // select * from user where id=1 and name=1 limit 1 // 长查询,支持多种模式(limit(limit, offset)) DB::table('user')->fields('id','name','age')->where('id','>',1)->group('age')->having('count(age)>2')->order('age', 'desc')->limit(10)->offset(0)->get(); // select id, name, age from user where (id>1) group by age having count(age)>2 order by age desc limit 10 offset 0; // where, orWhere, whereRaw, orWhereRaw, whereNull, whereNotNull, orWhereNull, orWhereNotNull, whereIn, orWhereIn, whereNotIn, orWhereNotIn DB::table('user')->whereNull('score')->orWhereRaw('age > 3')->orWhereNotIn('class', [2,3])->get(); // select * from user where (score is null) or (age>3) or (class is not in (2,3));
whereRaw
: 支持直接写SQL语句whereNull('name')
:where name is null
orWhereIn('id', [1,2,3])
:or id in (1,2,3)
- 依次类推,其他where类条件类似
聚合用法
<?php use Fizzday\FizzDB\DB; // count, sum, avg, max, min DB::table('user')->count(); // select count(1) as count from user; DB::table('user')->sum('age'); // select sum(age) as sum from user; DB::table('user')->avg('age'); // select round(avg(age), 0) as avg from user; DB::table('user')->max('age'); // select max(age) as max from user; DB::table('user')->min('age'); // select min(age) as min from user;
join
<?php use Fizzday\FizzDB\DB; DB::table('users a')->join('userinfo b', 'a.id', '=', 'b.uid')->first(); // select * from users a inner join userinfo b on a.id=b.uid limit 1; // leftJoin, rightJoin, innerJoin DB::table('users a')->leftJoin('userinfo b', 'a.id', '=', 'b.uid')->fields('a.id', 'b.card')->where('a.age', '>', 18)->limit(10)->get(); // select a.id,b.card from users a left join userinfo b on a.id=b.uid where (a.age>18) limit 10 offset 0;
todo
- []连接池
- []缓存