Phalcon\Db
是Phalcon\Mvc\Model
底層組件,由它驅動框架中的模型層。它徹底由C語言編寫,是一個獨立的數據庫高級抽象層。php
與傳統模型相比,該組件容許更底層的數據庫操做。mysql
該組件使用適配器來封裝特定的數據庫操做。Phalcon使用PDO鏈接數據庫,支持下列數據庫引擎:sql
類 | 說明 |
---|---|
Phalcon\Db\Adapter\Pdo\Mysql |
世界上最流行的關係型數據庫系統(RDBMS),做爲服務器運行,支持多用戶、多數據庫訪問 |
Phalcon\Db\Adapter\Pdo\Postgresql |
Postgresql是一個強大的開源關係數據庫系統,超過15年的發展和經過驗證的架構,爲其贏得了正確、可靠、數據完整的良好聲譽 |
Phalcon\Db\Adapter\Pdo\Sqlite |
SQLite是一個實現自包含、無服務、零配置的事務型數據庫 |
使用適配器選項加載PDO:數據庫
<?php use Phalcon\Db\Adapter\Pdo\Factory; $options = [ 'host' => 'localhost', 'dbname' => 'blog', 'port' => 3306, 'username' => 'sigma', 'password' => 'secret', 'adapter' => 'mysql', ]; $db = Factory::load($options);
建立自定義數據庫適配器或擴展示有適配器,必須實現Phalcon\Db\AdapterInterface
接口。數組
phalcon語言封裝了每一個數據庫的具體操做,爲適配器提供通用方法和SQL生成器。服務器
類 | 說明 |
---|---|
Phalcon\Db\Dialect\Mysql |
MySQL特定語言 |
Phalcon\Db\Dialect\Postgresql |
Postgresql特定語言 |
Phalcon\Db\Dialect\Sqlite |
SQLite特定語言 |
建立自定義數據庫語言或擴展示有語言,必須實現Phalcon\Db\DialectInterface
接口。架構
創建數據庫鏈接,必須實例化適配器類,它只接收一個包含鏈接參數的數組。下面例子展現瞭如何傳遞必選參數和可選參數來創建數據庫鏈接:app
<?php // 必選參數 $config = [ 'host' => '127.0.0.1', 'username' => 'mike', 'password' => 'sigma', 'dbname' => 'test_db', ]; // 可選參數 $config['persistent'] = false; // 創建鏈接 $connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);
<?php // 必選參數 $config = [ 'host' => 'localhost', 'username' => 'postgres', 'password' => 'secret1', 'dbname' => 'template', ]; // 可選參數 $config['schema'] = 'public'; // 創建鏈接 $connection = new \Phalcon\Db\Adapter\Pdo\Postgresql($config);
在創建鏈接時,傳遞options
參數設置PDO:框架
<?php // 使用PDO選項創建鏈接 $connection = new \Phalcon\Db\Adapter\Pdo\Mysql( [ 'host' => 'localhost', 'username' => 'root', 'password' => 'sigma', 'dbname' => 'test_db', 'options' => [ PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8', PDO::ATTR_CASE => PDO::CASE_LOWER, ], ] );
使用一個簡單的ini文件來配置 / 鏈接數據庫。post
[database] host = TEST_DB_MYSQL_HOST username = TEST_DB_MYSQL_USER password = TEST_DB_MYSQL_PASSWD dbname = TEST_DB_MYSQL_NAME port = TEST_DB_MYSQL_PORT charset = TEST_DB_MYSQL_CHARSET adapter = mysql
<?php use Phalcon\Config\Adapter\Ini; use Phalcon\Db\Adapter\Pdo\Factory; use Phalcon\Di; $di = new Di(); $config = new Ini('config.ini'); $di->set('config', $config); $di->set( 'db', function () { return Factory::load($this->config->database); } );
上述代碼返回數據庫鏈接實例,這樣作的好處是能夠在不修改應用代碼的狀況下改變數據庫鏈接甚至是數據庫適配器。
Phalcon\Db
提供了多種查詢方法。這種狀況下,SQL必須遵循數據庫引擎的特定語法:
<?php $sql = "SELECT id, name FROM robots ORDER BY name"; // 發送SQL語句到數據庫 $result = $connection->query($sql); // 打印robot的name字段 while ($robot = $result->fetch()) { echo $robot['name']; } // 獲取結果集數組 $robots = $connection->fetchAll($sql); foreach ($robots as $robot) { echo $robot['name']; } // 獲取結果集中的第一條記錄 $robot = $connection->fetchOne($sql);
默認狀況下,調用這些方法會返回一個數組(關聯+索引)。能夠調用Phalcon\Db\Result::setFetchMode()
方法改變這種行爲,該方法接收一個常量值,定義返回結果集的類型:
常量 | 說明 |
---|---|
Phalcon\Db::FETCH_NUM |
返回索引數組 |
Phalcon\Db::FETCH_ASSOC |
返回關聯數組 |
Phalcon\Db::FETCH_BOTH |
返回數組(索引+關聯) |
Phalcon\Db::FETCH_OBJ |
返回對象 |
<?php $sql = "SELECT id, name FROM robots ORDER BY name"; $result = $connection->query($sql); $result->setFetchMode(Phalcon\Db::FETCH_NUM); while ($robot = $result->fetch()) { echo $robot[0]; }
Phalcon\Db::query()
方法返回一個Phalcon\Db\Result\Pdo
實例。該對象封裝了與返回結果集相關的全部功能,如遍歷、查找特定行、統計總行數等。
<?php $sql = "SELECT id, name FROM robots"; $result = $connection->query($sql); // 遍歷結果集 while ($robot = $result->fetch()) { echo $robot['name']; } // 查找第三行 $result->seek(2); $robot = $result->fetch(); // 計算總行數 echo $result->numRows();
Phalcon\Db
支持參數綁定。使用參數綁定會影響性能,但能夠防止SQL注入。
支持字符串和數字佔位符,參數綁定能夠簡單的實現以下:
<?php // 數字佔位符 $sql = "SELECT * FROM robots WHERE name = ? ORDER BY name"; $result = $connection->query( $sql, [ 'Wall-E', ] ); // 字符串佔位符 $sql = "INSERT INTO `robots`(name, year) VALUES(:name, :year)"; $success = $connection->query( $sql, [ 'name' => 'Astro Boy', 'year' => 1952, ] );
使用數字佔位符時,須要將它們定義爲數字值(如1或2),'1'或'2'會被視爲字符串而非數字,致使佔位符不能被成功替換。使用任何數據庫適配器,數據都會被Pdo::Quote()
自動轉義。該方法會考慮到鏈接字符集,所以建議在鏈接選項或服務器配置中定義正確的字符集,錯誤的字符集會在存儲或檢索數據時產生不良影響。
此外,能夠將參數直接傳遞給execute() / query()方法,這種狀況下的綁定參數會直接傳遞給PDO:
<?php // PDO佔位符 $sql = "SELECT * FROM robots WHERE name = ? ORDER BY name"; $result = $connection->query( $sql, [ 1 => 'Wall-E', ] );
佔位符容許執行參數綁定以免SQL注入:
<?php $phql = "SELECT * FROM Store\Robots WHERE id > :id:"; $robots = $this->modelsManager->executeQuery( $phql, [ 'id' => 100, ] );
某些數據庫系統在使用佔位符時須要執行額外操做,如指定綁定參數的類型:
<?php use Phalcon\Db\Column; // ... $phql = "SELECT * FROM Store\Robots LIMIT :number:"; $robots = $this->modelsManager->executeQuery( $phql, [ 'number' => 10, ], Column::BIND_PARAM_INT );
能夠在參數中使用類型化的佔位符,而不用在executeQuery()
方法中指定:
<?php $phql = "SELECT * FROM Store\Robots LIMIT {number:int}"; $robots = $this->modelsManager->executeQuery( $phql, [ 'number' => 10, ] ); $phql = "SELECT * FROM Store\Robots WHERE name <> {name:str}"; $robots = $this->modelsManager->executeQuery( $phql, [ 'name' => $name, ] );
若是不須要指定綁定參數類型,能夠省略:
<?php $phql = "SELECT * FROM Store\Robots WHERE name <> {name}"; $robots = $this->modelsManager->executeQuery( $phql, [ 'name' => $name, ] );
類型化的佔位符很強大,咱們能夠綁定靜態數組,而無需將每一個參數做爲佔位符單獨傳遞:
<?php $phql = "SELECT * FROM Store\Robots WHERE id IN ({ids:array})"; $robots = $this->modelsManager->executeQuery( $phql, [ 'ids' => [1, 2, 3, 4], ] );
支持下列類型:
綁定類型 | 綁定類型常量 | 示例 |
---|---|---|
str | Column::BIND_PARAM_STR |
{name:str} |
int | Column::BIND_PARAM_INT |
{number:int} |
double | Column::BIND_PARAM_DECIMAL |
{price:double} |
bool | Column::BIND_PARAM_BOOL |
{enabled:bool} |
blob | Column::BIND_PARAM_BLOB |
{image:blob} |
null | Column::BIND_PARAM_NULL |
{exists:null} |
array | Column::BIND_PARAM_STR數組 |
{codes:array} |
array-str | Column::BIND_PARAM_STR數組 |
{names:array} |
array-int | Column::BIND_PARAM_INT數組 |
{flags:array} |
默認狀況下,綁定參數不會在PHP中轉換爲指定類型,
如,在LIMIT / OFFSET
中給佔位符傳遞一個字符串值就會致使錯誤:
<?php $number = '100'; $robots = $modelsManager->executeQuery( "SELECT * FROM Some\Robots LIMIT {number:int}", [ 'number' => $number, ] );
這會致使異常:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''100'' at line 1' in /Users/scott/demo.php:78
錯誤緣由是'100'是一個字符串。能夠先將值轉換爲整型:
<?php $number = '100'; $robots = $modelsManager->executeQuery( "SELECT * FROM Some\Robots LIMIT {number:int}", [ 'number' => (int) $number, ] );
要解決這個問題,須要開發者格外注意綁定參數類型及其如何傳遞。爲了簡化操做並避免異常,能夠指定Phalcon
自動轉換:
<?php \Phalcon\Db::setup(['forceCasting' => true]);
如下操做根據指定的綁定類型執行:
綁定類型 | 操做 |
---|---|
Column::BIND_PARAM_STR |
將值轉換爲PHP字符串 |
Column::BIND_PARAM_INT |
將值轉換爲PHP整型 |
Column::BIND_PARAM_BOOL |
將值轉換爲PHP布爾值 |
Column::BIND_PARAM_DECIMAL |
將值轉換爲PHP浮點數 |
從數據庫返回的值在PDO中始終表示爲字符串,不管該列值是數字仍是布爾值。這種狀況是由於某些列類型因爲其大小限制而沒法用PHP原來類型表示。例如,MySQL中的BIGINT
能夠存儲沒法用PHP 32位整型表示的大整數。因此,PDO和ORM默認將全部值做爲字符串。能夠設置ORM自動將這些值轉換爲PHP實際類型:
<?php \Phalcon\Mvc\Model::setup(['castOnHydrate' => true]);
經過這種方式,可使用嚴格運算符或對變量類型進行假設:
<?php $robot = Robots::findFirst(); if (11 === $robot->id) { echo $robot->name; }
可使用原生SQL或類方法來插入、更新、刪除記錄:
<?php // 用原生SQL插入數據 $sql = "INSERT INTO `robots`(`name`, `year`) VALUES('Astro Boy', 1952)"; $success = $connection->execute($sql); // 使用佔位符 $sql = "INSERT INTO `robots`(`name`, `year`) VALUES(?, ?)"; $success = $connection->execute( $sql, [ 'Astro Boy', 1952, ] ); // 動態生成SQL語句 $success = $connection->insert( 'robots', [ 'Astro Boy', 1952, ], [ 'name', 'year', ] ); // 動態生成SQL語句(另外一種語法) $success = $connection->insertAsDict( 'robots', [ 'name' => 'Astro Boy', 'year' => 1952, ] ); // 使用原生SQL更新數據 $sql = "UPDATE `robots` SET `name` = 'Astro Boy' WHERE `id` = 101"; $success = $connection->execute($sql); // 使用佔位符 $sql = "UPDATE `robots` SET `name` = ? WHERE `id` = ?"; $success = $connection->execute( $sql, [ 'Astro Boy', 101, ] ); // 動態生成SQL語句 $success = $connection->update( 'robots', [ 'name', ], [ 'New Astro Boy', ], 'id = 101' // 注意,這種狀況下值不會被自動轉義 ); // 條件中數據的轉義 $success = $connection->update( 'robots', [ 'name', ], [ 'New Astro Boy', ], [ 'conditions' => 'id = ?', 'bind' => [101], 'bindTypes' => [PDO::PARAM_INT], // 可選參數 ] ); $success = $connection->updateAsDict( 'robots', [ 'name' => 'New Astro Boy', ], [ 'conditions' => 'id = ?', 'bind' => [101], 'bindTypes' => [PDO::PARAM_INT], // 可選參數 ] ); // 使用原生SQL刪除記錄 $sql = "DELETE `robots` WHERE `id` = 101"; $success = $connection->execute($sql); // 使用佔位符 $sql = "DELETE `robots` WHERE `id` = ?"; $success = $connection->execute($sql, [101]); // 動態生成SQL語句 $success = $connection->delete( 'robots', 'id = ?', [ 101, ] );
PDO支持事務處理,在事務內部執行數據庫操做一般能夠提升數據庫的性能:
<?php try { // 開始事務 $connection->begin(); // 執行SQL語句 $connection->execute("DELETE `robots` WHERE `id` = 101"); $connection->execute("DELETE `robots` WHERE `id` = 102"); $connection->execute("DELETE `robots` WHERE `id` = 103"); // 若是一切順利,提交事務 $connection->commit(); } catch (Exception $e) { // 發生異常,回滾事務 $connection->rollback(); }
除了標準事務,Phalcon\Db
內置了嵌套事務(若是數據庫支持)。當再次調用begin()
方法時,會建立一個嵌套事務:
<?php try { // 開始事務 $connection->begin(); // 執行SQL語句 $connection->execute("DELETE `robots` WHERE `id` = 101"); try { // 開始嵌套事務 $connection->begin(); // 嵌套事務中執行SQL語句 $connection->execute("DELETE `robots` WHERE `id` = 102"); $connection->execute("DELETE `robots` WHERE `id` = 103"); // 建立保存點 $connection->commit(); } catch (Exception $e) { // 發生異常,回滾嵌套事務 $connection->rollback(); } // 繼續執行更多SQL語句 $connection->execute("DELETE `robots` WHERE `id` = 104"); // 若是一切順利,提交事務 $connection->commit(); } catch (Exception $e) { // 發生異常,回滾事務 $connection->rollback(); }
Phalcon\Db
可以將事件發送給EventManager(若是存在),某些事件返回false時,可能會終止操做。支持如下事件:
事件名稱 | 觸發時機 | 是否會終止操做 |
---|---|---|
afterConnect |
成功鏈接到數據庫後 | 否 |
beforeQuery |
執行SQL語句前 | 是 |
afterQuery |
執行SQL語句後 | 否 |
beforeDisconnect |
關閉臨時數據庫鏈接前 | 否 |
beginTransaction |
事務開啓前 | 否 |
rollbackTransaction |
事務回滾前 | 否 |
commitTransaction |
事務提交前 | 否 |
將EventsManager綁定到數據庫鏈接很簡單,Phalcon\Db
將觸發db
類型事件:
<?php use Phalcon\Db\Adapter\Pdo\Mysql as Connection; use Phalcon\Events\Manager as EventsManager; $eventsManager = new EventsManager(); // 監聽全部數據庫事件 $eventsManager->attch('db', $dbListener); $connection = new Connection( [ 'host' => 'localhost', 'username' => 'root', 'password' => 'secret', 'dbname' => 'invo', ] ); // 將eventsManager分配給數據庫適配器實例 $connection->setEventsManager($eventsManager);
數據庫事件中,終止SQL操做很是有用。例如,想在SQL執行前實現注入檢查:
<?php use Phalcon\Events\Event; $eventsManager->attch( 'db:beforeQuery', function (Event $event, $connection) { $sql = $connection->getSQLStatement(); // 檢查SQL中是否有惡意關鍵字 if (preg_match('/DROP|ALTER/i', $sql)) { // 不容許DROP / ALTERT操做 return false; } return true; } )
Phalcon\Db
內置了性能分析組件Phalcon\Db\Profiler
,用於分析數據庫性能,以便診斷問題,發現瓶頸。使用Phalcon\Db\Profiler
進行數據庫分析至關容易:
<?php use Phalcon\Db\Profiler as DbProfiler; use Phalcon\Events\Event; use Phalcon\Events\Manager as EventsManager; $eventsManager = new EventsManager(); $profiler = new DbProfiler(); // 監聽全部數據庫事件 $eventsManager->attch( 'db', function (Event $event, $connection) use ($profiler) { if ($event->getType() === 'beforeQuery') { $sql = $connection->getSQLStatement(); // 開始分析 $profiler->startProfile($sql); } if ($event->getType() === 'afterQuery') { // 中止分析 $profiler->stopProfile(); } } ); // 將事件管理器分配給數據庫鏈接 $connection->setEventsManager($eventsManager); $sql = "SELECT buyer_name, quantity, product_name FROM buyers LEFT JOIN products ON buyers.pid = products.id"; // 執行SQL語句 $connection->query($sql); // 獲取最後一個分析結果 $profile = $profiler->getLastProfile(); echo 'SQL Statement: ', $profile->getSQLStatement(), "\n"; echo 'Start Time: ', $profile->getInitialTime(), "\n"; echo 'Final Time: ', $profile->getFinalTime(), "\n"; echo 'Total Elapsed Time: ', $profile->getTotalElapsedSeconds(), "\n";
還能夠基於Phalcon\Db\Profiler
建立本身的分析器,以實時統計發送到數據庫的SQL語句:
<?php use Phalcon\Db\Profiler as Profiler; use Phalcon\Db\Profiler\Item as Item; use Phalcon\Events\Manager as EventsManager; class DbProfiler extends Profiler { // SQL語句發送給數據庫服務器以前執行 public function beforeStartProfile(Item $profile) { echo $profile->getSQLStatement(); } // SQL語句發送到數據庫服務器以後執行 public function afterEndProfile(Item $profile) { echo $profile->getTotalElapsedSeconds(); } } // 建立事件管理器 $eventsManager = new EventsManager(); // 建立事件監聽器 $dbProfiler = new DbProfiler(); // 設置監聽器監聽全部數據庫事件 $eventsManager->attch('db', $dbProfiler);
使用諸如Phalcon\Db
這樣的高級抽象組件來訪問數據庫時,很難獲知哪些語句被髮送到了數據庫。Phalcon\Logger
配合Phalcon\Db
使用,能夠在數據庫抽象層上提供日誌記錄功能。
<?php use Phalcon\Events\Event; use Phalcon\Events\Manager as EventsManager; use Phalcon\Logger; use Phalcon\Logger\Adapter\File as FileLogger; $eventsManager = new EventsManager(); $logger = new FileLogger('app/logs/db.log'); $eventsManager->attch( 'db:beforeQuery', function (Event $event, $connection) use ($logger) { $sql = $connection->getSQLStatement(); $logger->log($sql, Logger::INFO); } ); // 將eventsManager分配給數據庫適配器實例 $connection->setEventsManager($eventsManager); // 執行SQL語句 $connection->insert( 'products', [ 'Hot pepper', 3.50, ], [ 'name', 'price', ] );
如上所述,文件app/logs/db.log
將包含下列內容:
[Sun, 29 Apr 12 22:35:26 -0500][DEBUG][Resource Id #77] INSERT INTO products (name, price) VALUES ('Hot pepper', 3.50)
能夠自定義記錄器以記錄數據庫操做,經過建立一個實現了log()
方法的類,該方法接受一個字符串做爲第一個參數。能夠將記錄器對象傳遞給Phalcon\Db::setLogger()
,這樣在執行任何SQL語句時將調用log()
方法進行記錄。
Phalcon\Db
提供了獲取表、視圖詳情的方法:
<?php // 獲取test_db庫中的數據表 $tables = $connection->listTables('test_db'); // 表'robots'是否存在於當前庫中 $exists = $connection->tableExists('robots'); // 獲取'robots'表字段名稱、類型、特性 $fields = $connection->describeColumns('robots'); foreach ($fields as $field) { echo 'Column Type: ', $field['Type']; } // 獲取'robots'表索引 $indexes = $connection->describeIndexes('robots'); foreach ($indexes as $index) { print_r( $index->getColumns() ); } // 獲取'robots'表外鍵 $references = $connection->describeReferences('robots'); foreach ($references as $reference) { // 打印引用列 print_r( $reference->getReferenceColumns() ); }
表詳情和MySQL的describe命令返回的信息類似,包含以下信息:
Field | Type | Key | Null |
---|---|---|---|
字段名稱 | 字段類型 | 是否主鍵或索引列 | 是否容許爲空 |
對於被支持的數據庫系統,一樣實現了獲取視圖詳情的方法:
<?php // 獲取test_db庫中的視圖 $tables = $connection->listViews('test_db'); // 視圖'robots'是否存在於當前庫中 $exists = $connection->viewExists('robots');
不一樣的數據庫系統(MySQL,Postgresql等)經過CREATE、ALTER、DROP命令提供了用於建立、修改、刪除數據表的功能。SQL語法因數據庫而異。Phalcon\Db
爲編輯表提供了統一接口,無需區分不一樣數據庫系統的SQL語法。
下面例子展現如何建立表:
<?php use Phalcon\Db\Column as Column; $connection->createTable( 'robots', null, [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'size' => 10, 'notNull' => true, 'autoIncrement' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 70, 'notNull' => true, ] ), new Column( 'year', [ 'type' => Column::TYPE_INTEGER, 'size' => 11, 'notNull' => true, ] ), ], ] );
Phalcon\Db::createTable()
接收一個描述數據表的關聯數組,用Phalcon\Db\Column
類建立字段,下表列出了定義字段的選項:
選項 | 說明 | 是否可選 |
---|---|---|
type |
字段類型,必須是PhalconDbColumn 常量 |
否 |
primary |
是否主鍵 | 是 |
size |
VARCHAR 或INTEGER 類型的字段定義字段長度 |
是 |
scale |
DEMICAL 或NUMBER 類型字段定義數據精度 |
是 |
unsigned |
INTEGER 類型字段定義是否有符號,該選項不適用於其餘類型字段 |
是 |
notNull |
字段是否非空 | 是 |
default |
默認值 | 是 |
autoIncrement |
是否自增 | 是 |
bind |
BIND_TYPE_* 常量定義字段在保存前如何綁定數據 |
是 |
first |
把字段設置爲表的第一個字段 | 是 |
after |
設置字段放在指定字段以後 | 是 |
Phalcon\Db
支持下列字段類型:
Phalcon\Db\Column::TYPE_INTEGER
Phalcon\Db\Column::TYPE_DATE
Phalcon\Db\Column::TYPE_VARCHAR
Phalcon\Db\Column::TYPE_DECIMAL
Phalcon\Db\Column::TYPE_DATETIME
Phalcon\Db\Column::TYPE_CHAR
Phalcon\Db\Column::TYPE_TEXT
傳入Phalcon\Db::createTable()
方法的關聯數組可能包含下列索引:
索引 | 說明 | 是否可選 |
---|---|---|
columns |
由Phalcon\Db\Column 定義的字段組成的數組 |
否 |
indexes |
由Phalcon\Db\Index 定義的表索引組成的數組 |
是 |
references |
由Phalcon\Db\Reference 定義的表引用(外鍵)組成的數組 |
是 |
options |
包含表建立選項的數組,這些選項一般與數據庫遷移相關 | 是 |
隨着應用程序愈來愈龐雜,可能須要調整數據庫,做爲重構或添加新功能的一部分。並不是全部數據庫系統都容許修改列或者新增列,Phalcon\Db
也受到這些限制:
<?php use Phalcon\Db\Column as Column; // 新增列 $connection->addColumn( 'robots', null, new Column( 'robot_type', [ 'type' => Column::TYPE_VARCHAR, 'size' => 32, 'notNull' => true, 'after' => 'name', ] ) ); // 編輯列 $connection->modifyColumn( 'robots', null, new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 40, 'notNull' => true, ] ) ); // 刪除'name'列 $connection->dropColumn( 'robots', null, 'name' );
刪除表示例:
<?php // 從當前庫中刪除'robots'表 $connection->dropTable('robots'); // 從'machines'庫中刪除'robots'表 $connection->dropTable('robots', 'machines');