搜尋

Redbean簡介

Feb 23, 2025 am 08:27 AM

Introduction to Redbean

核心要點

  • RedBeanPHP是一個ORM(對象關係映射器),它可以動態創建和修改底層數據庫模式,非常適合原型設計和加快開發速度。
  • RedBeanPHP允許您創建對象(或“bean”)並將其保存到數據庫中,即使沒有對應的表,它也會自動調整模式以適應。
  • RedBeanPHP通過“擁有”相關對象的理念支持對象之間的關係,包括一對一、一對多和多對多關係。
  • RedBeanPHP的“流式模式”允許在對象更改時自動調整數據庫模式,但建議在生產環境中切換到“凍結模式”,以提高性能和安全性。
  • 雖然RedBeanPHP是原型設計和快速迭代的絕佳工具,但在生產環境中使用時也需要謹慎,例如檢查列數據類型、外鍵、關係和索引。

RedBeanPHP 簡介

在快速應用開發(RAD)和原型設計方面,有很多工具可以幫助您快速啟動項目。從快速入門到微型框架,從Composer之類的構建工具到一鍵式安裝程序,當然還有ORM——有很多方法可以加快開發速度。我們將重點介紹RedBeanPHP,一個與眾不同的ORM,非常適合原型設計。

RedBeanPHP 入門

RedBeanPHP是一個ORM(對象關係映射器),但它不僅僅是一個ORM——它可以動態創建和修改底層數據庫模式。傳統上,您會將ORM用作預先規劃的、預先存在的數據庫模式的包裝器。這對大多數項目來說都沒問題,但是當您進行原型設計(或邊做邊想)時,讓它在後台為您完成可以進一步加快速度。

當您使用RedBeanPHP創建對象(或bean)時,只要您將其保存到數據庫,模式就會自動調整以適應。即使您嘗試保存沒有對應表的對象,這也適用!

安裝

安裝RedBeanPHP最簡單的方法是下載一體化軟件包。然後,您只需要引入單個文件rb.php即可。

您也可以通過Composer安裝;但是,庫的作者不推薦這種方法——請參閱安裝頁面了解詳情。

分發 Bean

使用RedBeanPHP的第一步是“分發”一個bean——它基本上就是一個對象。請注意,在本文的其餘部分,我將“bean”和對象互換使用。

分發是通過上層RedBean類“R”的靜態方法完成的,該方法將類型作為參數。

例如:

$user = R::dispense('user');

這將創建一個空的user對象,您可以為其分配屬性。您還可以通過添加所需數量作為第二個參數來同時分發多個bean:

$users = R::dispense('user', 10);

在這個階段,數據庫中是否存在表來保存它並不重要;只要我們嘗試存儲它,RedBeanPHP就會處理它。

讓我們嘗試一下——請注意靜態方法store的使用,該方法用於寫入數據庫:

$user = R::dispense('user');

在大多數ORM中,如果您尚未創建表來保存用戶,則此操作會失敗。但是,使用RedBeanPHP,此操作會成功,因為它會為您創建表。如果您在這個階段查看您的數據庫,您應該會看到這樣的表:

$users = R::dispense('user', 10);

由於需要,命名約定非常嚴格;它是您指定的類型的單數、小寫表示。

現在讓我們看看如何在迭代時模式發生變化。用戶記錄可能需要一個密碼字段——但我們忘記創建了。

如果您這樣做:

$user->name = 'Joe Bloggs';
$user->email = 'joe.bloggs@example.com';
$id = R::store($user);
print $id;

這次,RedBeanPHP知道如何存儲用戶,但是數據庫表無法容納新的字段。沒關係——它只需添加一個,您的表現在看起來像這樣:

<code>user
----

id      int(11) UN PK AI
name    varchar(255)
email   varchar(255)</code>

(以下內容與原文類似,但進行了語句結構和用詞上的調整,並保持了圖片位置和格式不變)

字段數據類型

RedBeanPHP會根據您提供的信息嘗試猜測字段的數據類型。因此,如果您這樣做:

$user->password = 'secret';
R::store($user);

您會發現age字段已創建為tinyint。

如果字段類型稍後不足,RedBeanPHP會動態更改它。如果您現在嘗試將3000賦值給age,則該列將更改為int。如果您將名稱拼寫為“thirty”,它將更改為varchar。將varchar字段設置為超過255個字符,它將變成TEXT字段,依此類推。

查找 Bean

您可以使用load方法按主鍵加載特定對象:

<code>user
----

id          int(11) UN PK AI
name        varchar(255)
email       varchar(255)
password    varchar(255)</code>

您可以使用batch方法一次加載多個對象(按主鍵):

$user->age = 30;
R::store($user);

這將返回一個bean數組。

您還可以使用SQL查找bean。 find方法的第二個參數本質上是從WHERE子句開始的SQL,不包括WHERE關鍵字本身。例如,要查找年齡不到20歲的用戶:

$user = R::load('user', 1);

請注意,我們正在綁定參數,因此第三個參數是一個數組。這將返回一個使用其ID作為鍵的bean數組。

您可以向SQL添加更多子句,例如:

計數

您可以使用count方法查找記錄數:

$users = R::batch('user', array(1, 2, 3));

刪除

要刪除單個bean,請使用trash

$users = R::find('user', 'age < 20');

要刪除特定類型的多個bean,請使用trashAll

$number_of_users = R::count('user');

要刪除特定類型的全部bean,請使用wipe

R::trash($user);

或者,要刪除所有內容——這在原型設計時可能很有用——您可以使用nuke

R::trashAll('user');

關係

與任何ORM一樣,也支持對象之間的關係。

一對多關係使用“擁有”相關對象的理念來引用。例如,如果訂單只有一個用戶,則該用戶被稱為“擁有”這些訂單。通過使用特定的變量名,我們可以像這樣建立這種關係:

$user = R::dispense('user');

這裡的關鍵元素是屬性ownOrders。如果您現在檢查您的數據庫,您應該會發現RedBeanPHP已將字段user_id添加到order表中,以及相應的外鍵。

“擁有”訂單的用戶可以簡單地作為屬性訪問,例如:

$users = R::dispense('user', 10);

為了演示多對多關係,讓我們創建一些角色:

$user->name = 'Joe Bloggs';
$user->email = 'joe.bloggs@example.com';
$id = R::store($user);
print $id;

角色不僅僅屬於單個用戶;它們是共享的。因此,要將前兩個角色分配給用戶,並在這樣做時在數據庫中建立關係,我們可以這樣做:

<code>user
----

id      int(11) UN PK AI
name    varchar(255)
email   varchar(255)</code>

這次,您應該會發現一個名為role_user的新表,它將此關係定義為多對多關係。

您可以通過讀取屬性來獲取屬於用戶的角色:

$user->password = 'secret';
R::store($user);

這會在第一次訪問角色時延遲加載它們。

關係還有很多內容,包括使用link向關係添加屬性、按鏈接過濾、急切加載等等——請查看文檔了解詳情。

模型

您可以創建模型以對應於bean類型,只需遵循某些命名約定即可。然後,模型使用FUSE連接到bean;也就是說,通過遵循相關的命名約定,它們被融合在一起。

約定很簡單;用下劃線分隔“Model”和類型,例如Model_Type。例如,要為用戶創建模型,您只需執行以下操作:

<code>user
----

id          int(11) UN PK AI
name        varchar(255)
email       varchar(255)
password    varchar(255)</code>

定義模型後,您可以實現許多方法,這些方法將在bean生命週期的不同點被調用。下表說明了CRUD操作與您可以實現的“鉤子”之間的映射:

操作 钩子方法
R::store $model->update()
R::store $model->after_update()
R::load $model->open()
R::trash $model->delete()
R::trash $model->after_delete()
R::dispense $model->dispense()

例如,您可以通過實現update()來添加驗證:

$user = R::dispense('user');

您當然也可以創建自己的方法以及自定義GETter。

查詢數據庫

您可以像這樣執行原始SQL查詢:

$users = R::dispense('user', 10);

您可以像這樣返回一個多維行數組:

$user->name = 'Joe Bloggs';
$user->email = 'joe.bloggs@example.com';
$id = R::store($user);
print $id;

此外,您可以使用參數綁定:

<code>user
----

id      int(11) UN PK AI
name    varchar(255)
email   varchar(255)</code>

您可以像這樣獲取單個列:

$user->password = 'secret';
R::store($user);

您還可以使用表的兩列獲取關聯數組:

<code>user
----

id          int(11) UN PK AI
name        varchar(255)
email       varchar(255)
password    varchar(255)</code>

部署您的應用程序

雖然它可以說是最適合原型設計(或至少是開發)的——但只要您遵循某些步驟,就沒有理由不能將RedBeanPHP繼續用於生產環境。

RedBeanPHP動態更新模式的機制稱為“流式模式”;但是,這並不適合生產環境,並且性能開銷相當大。但是,您可以通過“凍結”它來關閉它:

$user->age = 30;
R::store($user);

在投入生產環境時,您需要遵循以下幾個步驟:

  • 檢查列數據類型
  • 檢查外鍵和關係
  • 檢查索引——RedBeanPHP會創建一些索引——並根據需要進行修改

總結

在本文中,我介紹了RedBeanPHP,它是一種方便的方法,可以通過讓您無需先構建底層模式即可處理域模型來啟動您的開發過程。它是否適合生產環境還有待觀察——但對於原型設計和快速迭代,它是一個很棒的小工具。我沒有涵蓋很多內容,因此請務必查看文檔。

RedBeanPHP常見問題解答

RedBeanPHP 的主要功能是什麼?

RedBeanPHP是一個簡單、輕量級的對象關係映射(ORM)工具,它提供了一系列旨在簡化數據庫交互的功能。它以其“零配置”方法而聞名,這意味著它只需要最少的設置和配置。它會根據您創建的對象自動構建數據庫模式,並且在對象更改時可以根據需要調整模式。 RedBeanPHP還支持流式模式和凍結模式,使您可以輕鬆地在開發和生產環境之間切換。它包括內置的樹結構,並支持bean罐裝和分發,以便輕鬆存儲和檢索對象。

RedBeanPHP 與其他 ORM 工具相比如何?

與其他ORM工具相比,RedBeanPHP以其簡單易用性而脫穎而出。它不需要配置文件、SQL或模型類。這使其成為初學者或項目(其中全功能ORM顯得多餘)的絕佳選擇。但是,它仍然提供強大的功能,例如自動模式修改和樹結構,使其足以勝任更複雜的項目。

如何安裝和設置 RedBeanPHP?

RedBeanPHP可以通過Composer(一個流行的PHP依賴項管理工具)安裝。安裝後,您可以通過在腳本中包含RedBeanPHP文件並設置數據庫連接來設置RedBeanPHP。 RedBeanPHP將根據您的對象自動創建和修改表。

RedBeanPHP 中的“流式模式”是什麼?

流式模式是RedBeanPHP的一項功能,它允許它在對象更改時自動調整數據庫模式。這在開發過程中可以節省大量時間,因為您不必每次更改對象時都手動修改數據庫。但是,建議出於性能和安全原因在生產環境中切換到“凍結模式”。

RedBeanPHP 如何處理對象之間的關係?

RedBeanPHP支持對象之間的幾種關係類型,包括一對一、一對多和多對多。這些關係是通過使用“bean”(表示數據庫表中行的簡單對象)來處理的。您可以輕鬆地將bean相互關聯以表示對象之間的關係。

我可以將 RedBeanPHP 與我現有的數據庫一起使用嗎?

是的,RedBeanPHP可以與現有數據庫一起使用。但是,請注意,RedBeanPHP的自動模式修改功能可能會更改數據庫結構,因此建議在使用RedBeanPHP之前備份數據庫。

RedBeanPHP 是否適合大型複雜項目?

雖然RedBeanPHP以其簡單易用性而聞名,但它還提供強大的功能,使其也適合大型複雜項目。它的自動模式修改、對各種關係類型的支持以及內置的樹結構在大型項目中都非常有用。但是,對於非常大型或複雜的項目,更全面的ORM工具可能更合適。

RedBeanPHP 如何處理安全性?

RedBeanPHP包含多項旨在增強安全性的功能。它使用預處理語句來幫助防止SQL注入攻擊,並建議在生產環境中使用“凍結模式”以防止意外的模式更改。但是,與任何工具一樣,務必遵循安全最佳實踐並使RedBeanPHP保持最新狀態。

RedBeanPHP 中的“bean 罐裝”是什麼?

bean罐裝是RedBeanPHP的一項功能,它允許您一次存儲和檢索整個bean(對象)集。這可能是處理大量數據的便捷方法,並且還可以通過減少數據庫查詢次數來幫助提高性能。

我可以在沒有 Composer 的情況下使用 RedBeanPHP 嗎?

雖然Composer是安裝RedBeanPHP的推薦方法,但也可以直接下載並包含RedBeanPHP文件到您的腳本中。但是,使用Composer可以更輕鬆地管理和更新RedBeanPHP以及項目可能具有的任何其他依賴項。

以上是Redbean簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。