摘要:是一款為快速開發(fā)而設(shè)計(jì)的框架加星請點(diǎn)這里。對進(jìn)行了封裝,使開發(fā)者可以更方便的編寫正確和安全的。下面將繼續(xù)上一篇快速開發(fā)接口的示例,介紹的使用。配置可以通過依賴注入的方式,對數(shù)據(jù)庫進(jìn)行配置。
PhpBoot 是一款為快速開發(fā) RESTful API 而設(shè)計(jì)的PHP框架(加星請點(diǎn)這里>>>PbpBoot Github<<<)。
PhpBootDB 對PDO進(jìn)行了封裝,使開發(fā)者可以更方便的編寫正確和安全的 SQL。下面將繼續(xù)上一篇: 快速開發(fā) RESTful 接口的示例,介紹PhpBootDB的使用。
配置可以通過依賴注入的方式,對數(shù)據(jù)庫進(jìn)行配置。
在需要數(shù)據(jù)庫的類中加入依賴注入代碼:
use PhpBootDBDB; use PhpBootDITraitsEnableDIAnnotations; class Books { use EnableDIAnnotations; //啟用通過@inject標(biāo)記注入依賴 /** * @inject * @var DB */ private $db; public function getBooks()... }
框架在實(shí)例化Books后,根據(jù)@inject注釋, 自動(dòng)給屬性$db賦值,其邏輯等價(jià)于:
$books->db = $app->get(DB::class);
修改數(shù)據(jù)庫配置
在 config.php 中加入以下配置(數(shù)據(jù)庫地址等需根據(jù)實(shí)際情況修改):
"DB.connection"=> "mysql:dbname=phpboot-example;host=127.0.0.1", "DB.username"=> "root", "DB.password"=> "root", "DB.options" => [],編寫 SQL
下面將通過實(shí)現(xiàn) createBook、deleteBook、updateBook、findBooks 方法,演示insert、delete、update、select 的使用。
INSERTpublic function createBook(Book $book) { $newId = $this->db->insertInto("books") ->values([ "name"=>$book->name, "brief"=>$book->brief, ... ]) ->exec() ->lastInsertId(); return $newId; }DELETE
public function deleteBook($id) { $this->db->deleteFrom("books") ->where(["id"=>$id]) ->exec(); }UPDATE
public function updateBook(Book $book) { $this->db->update("books") ->set([ "name"=>$book->name, "brief"=>$book->brief, ... ]) ->where(["id"=>$book->id]) ->exec(); }SELECT
public function findBooks($name, $offsit, $limit) { $books = $this->db->select("*") ->from("books") ->where("name LIKE ?", "%$name%") ->orderBy("id") ->limit($offsit, $limit)->get(); return $books; }高級用法
上述示例展示了PhpBootDB的基礎(chǔ)用法,PhpBootDB同時(shí)也支持更復(fù)雜的SQL。
復(fù)雜 WHERE類似 SQL WHERE a=1 OR (b=2 and c=3), 可以以下代碼實(shí)現(xiàn):
->where(["a"=>1]) ->orWhere(function(ScopedQuery $query){ $query->where(["b"=>2, "c"=>3]) })
上面例子中,ScopedQuery 中還能再嵌套 ScopedQuery。
JOIN$db->select("books.*", DB::raw("authors.name as author")) ->from("books") ->where(["books.id"=>1]) ->leftJoin("authors")->on("books.authorId = authors.id") ->get()WHERE ... IN ...
使用PDO時(shí),WHERE IN的預(yù)處理方式很不方便,需要為IN的元素預(yù)留數(shù)量相等的?, 比如:
$pdo->prepare( "SELECT * FROM table WHERE a IN (?,?,?)" )->execute([1,2,3])
而使用PhpBootDB可以解決這個(gè)問題:
$db->select()->from("table")->where("a IN (?)", [1,2,3]);使用 SQL 函數(shù)
默認(rèn)情況下,框架會(huì)對輸入做轉(zhuǎn)換, 如會(huì)在表名和列名外加上 `` ,會(huì)把變量作為綁定處理,比如下面的語句
$db->select("count(*) AS count") ->from("table") ->where(["time"=>[">"=>"now()"]]);
等價(jià) 的 SQL:
SELECT `count(*) AS count` FROM `table` where `time` > "now()"
如果希望框架不做轉(zhuǎn)換,需要使用DB::raw(),比如:
$db->select(DB::raw("count(*) AS count")) ->from("table") ->where(["time"=>[">"=>DB::raw("now()")]]);
與下面 SQL 等價(jià)
SELECT count(*) AS count FROM `table` where `time` > now()子查詢
下面代碼演示子查詢用法:
$parent = $db->select()->from("table1")->where("a=1"); $child = $db->select()->from($parent);
與下面 SQL 等價(jià)
SELECT * FROM (SELECT * FROM `table1` WHERE a=1)事務(wù)
$db->transaction( function(DB $db){ $db->update("table1")->... $db->update("table1")->... } )
事務(wù)允許嵌套,但只有最外層的事務(wù)起作用,內(nèi)部嵌套的事務(wù)與最外層事務(wù)將被當(dāng)做同一個(gè)事務(wù)。
使用多個(gè)數(shù)據(jù)庫PhpBoot 為DB 類定義了默認(rèn)的構(gòu)造方式,形式如下:
DB::class => DIfactory([DB::class, "connect"]) ->parameter("dsn", DIget("DB.connection")) ->parameter("username", DIget("DB.username")) ->parameter("password", DIget("DB.password")) ->parameter("options", DIget("DB.options")),
所以如果你的業(yè)務(wù)只使用連接一個(gè)數(shù)據(jù)庫,只需要對DB.connection, DB.username ,DB.password, DB.options進(jìn)行配置即可。但有的時(shí)候可能需要對在應(yīng)用中連接不同的數(shù)據(jù)庫,這時(shí)可以通過依賴注入配置多個(gè)庫,如:
先配置另一個(gè)數(shù)據(jù)庫連接
"another_db" => DIfactory([DB::class, "connect"]) ->parameter("dsn", "mysql:dbname=phpboot-example;host=127.0.0.1") ->parameter("username", "root") ->parameter("password", "root") ->parameter("options", [])
在需要的地方注入此連接
use PhpBootDB; class Books { /** * @inject another_db * @var DB */ private $db2; }
幫助和文檔
在線文檔
QQ 交流群:185193529
本人郵箱 [email protected]
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25707.html
摘要:是為快速開發(fā)設(shè)計(jì)的框架。特色框架提供許多主流的特性如依賴注入等。輕松支持是目前最流行的接口文檔框架。在一開始就非常注重框架的友好性盡可能讓框架保持準(zhǔn)確的代碼提示。 PhpBoot showImg(https://segmentfault.com/img/remote/1460000004864102);showImg(https://segmentfault.com/img/remot...
摘要:我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。,一種在以太坊開發(fā)人員中流行的新的簡單編程語言,因?yàn)樗怯糜陂_發(fā)以太坊智能合約的語言。它是全球至少萬開發(fā)人員使用的世界上最流行的編程語言之一。以太坊,主要是針對工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。 我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。區(qū)塊鏈技術(shù)處于初期階段,然而這種顛覆性技術(shù)已經(jīng)成功地風(fēng)靡全球,并且最近經(jīng)歷了一場與眾不同的繁榮。由于許多...
摘要:一般地我們的映射配置文件和對象是放在同一個(gè)包下的。并且映射文件的命名是有規(guī)范的。指定字符的長度默認(rèn)為指定映射表的字段的類型,如果 前言 本博文主要講解介紹Hibernate框架,ORM的概念和Hibernate入門,相信你們看了就會(huì)使用Hibernate了! 什么是Hibernate框架? Hibernate是一種ORM框架,全稱為 Object_Relative DateBase-M...
摘要:盡管如此,還具有高級的數(shù)據(jù)類型和靈活性。它配備了大量的標(biāo)準(zhǔn)模塊,可用于程序庫。一些模塊提供如下功能通過這些很贊的特性,瞬時(shí)化身為面向過程的語言。開發(fā)者可以便捷地將解釋器連接到一個(gè)使用編寫的應(yīng)用程序,并能隨時(shí)用作擴(kuò)展。下一部分會(huì)繼續(xù)分享。 【編者按】本文作者是 Abhishek Jaiswal ,擅長 .NET、C#、Python 等多種語言的技術(shù)控。本文中,作者通過活潑有趣的口吻向大家...
閱讀 3807·2021-11-12 10:34
閱讀 2822·2021-09-22 15:14
閱讀 790·2019-08-30 15:53
閱讀 3207·2019-08-30 12:53
閱讀 1291·2019-08-29 18:32
閱讀 2771·2019-08-29 16:41
閱讀 1068·2019-08-26 13:40
閱讀 1810·2019-08-23 18:07