一個簡單、快速的基于PHP和PDO的數(shù)據(jù)庫中間層
使用Laravel ORM和ThinkORM,感覺不好用,把Svick框架里面的ORM抽離出來搞了一個
https://gitee.com/tomener/svickorm
composer require tomener/svickorm
安裝后將自動生成 config/svickorm.php 數(shù)據(jù)庫配置文件,開發(fā)者需要根據(jù)實際情況手動更改數(shù)據(jù)庫配置。
<?php
namespace app\controller;
use support\Request;
use Svickorm\Db;
class Index
{
public function db(Request $request)
{
$id = $request->getInt('id');
$p = $request->getInt('p', 1);
//查詢一條數(shù)據(jù)
$user = Db::table('user')->where($id)->row();
$user = Db::table('user')
->where(['level' => 2])
->orderBy('sort DESC')
->row();
$user = Db::table('user')->find($id);
//查詢指定字段
$user = Db::table('user')->where($id)->row('id, nickname');
$user = Db::table('user')->find($id, 'id, nickname');
//查詢列表
$page = ['limit' => 10, 'p' => $p];
$users = Db::table('user')->where(['status' => 1, 'level' => ['>', 1]])
->select('id, nickname')
->page($page)
->orderBy('level DESC')
->list();
return result(0, 'OK', [
'info' => $user,
'list' => $users,
'page' => $page,
]);
}
}
模型文件可以放在/app/model下面,也可以單獨創(chuàng)建一個user文件夾,放在user文件夾下面,svickorm模型繼承Svickorm\Model,類似如下
<?php
namespace app\model\user;
use Svickorm\Model;
class User extends Model
{
}
<?php
namespace app\controller;
use app\model\user\User;
use support\Request;
use Svickorm\Db;
class Index
{
public function list(Request $request)
{
$id = $request->getInt('id');
$p = $request->getInt('p', 1);
//查詢所有字段
$user = User::where($id)->row();
// 或者
$user = User::find($id);
$user = User::find($id)->toArray();
//查詢指定字段
$user = User::where($id)->row('id, nickname');
//或者
$user = User::find($id, 'id, nickname');
//查詢列表
$page = ['limit' => 10, 'p' => $p];
$users = User::where(['status' => 1, 'level' => ['>', 2]])
->select('id, nickname')
->page($page)
->orderBy('level DESC')
->list();
return result(0, 'OK', [
'info' => $user,
'list' => $users,
'page' => $page,
]);
}
}
$user_ids = [1, 5, 8];
$user_map = User::where(['id' = ['in', $user_ids]])->column('name');
/**
['lucy', 'candy', 'tommy']
*
$user_map = User::where(['id' = ['in', $user_ids]])->column('name', 'id');
//輸出
/**
[
[1] => 'lucy',
[5] => 'candy',
[8] => 'tommy',
]
*/
$user_map = User::where(['id' = ['in', $user_ids]])->column('name, level', 'id');
//輸出
/**
[
[1] => ['name' => 'lucy', 'level' => 2],
[5] => ['name' => 'candy', 'level' => 1],
[8] => ['name' => 'tommy', 'level' => 5],
]
*/
$id = 5;
$name = User::where($id)->value('name');
User::insert(['name' => 'bob', 'level' => 2]);
User::insertAll([
['name' => 'bob', 'level' => 2],
['name' => 'weky', 'level' => 1]
]);
$uid = 100;
User::where($uid)->update([
'level' => 5,
'nickname' => 'womeen',
'score' => ['+', 5]
]);
User::where($uid)->inc('score');
User::where($uid)->dec('score', 5);
sum count avg max min
$uid = 100;
User::where($uid)->delete();
$page = ['limit' => 10, 'p' => 1];
$admins = Db::table('admin')->alias('a')
->join('user u', 'a.uid = u.id')
->select('a.id, a.uid, a.name, u.nickname')
->where('a.status', 1)
->where(['u.level' => 2, 'u.status' => 1])
->page($page)
->list()
//開啟事務(wù)
User::connection()->startTrans();
//回滾事務(wù)
User::connection()->rollback();
//提交事務(wù)
User::connection()->commit();
User::connection()->getLastSql();
User::connection()->ping()
$id = 100;
$num = 2;
User::where(['id' => $id, 'stock' => ['>=', $num]])
->forUpdate()
->update([
'stock' => ['-', $num]
]);
更多方法請參考 使用文檔
這個方法是自己擴展的嗎,自動轉(zhuǎn) int ?