[英]loading a PHP class object from a database--best practices, database handle, etc
我認為我的問題也許已經在Stackoverflow上的其他位置得到了部分回答,但是我覺得通過一起詢問可以得到更全面的答案。 我為我可能會鍵入的任何內容都道歉-我在PHP中工作得不夠充分,所以當我這樣做時,我感覺就像在重新學習一遍。
無論如何,假設我有一個名為“ items”的mysql數據庫表,其中包含以下列: item_id
, item_type
, item_name
。 我有一個PHP類,看起來像這樣:
class Item
{
public $item_id;
public $item_type;
public $item_name;
}
換句話說,我真的只想要從數據庫到類對象的直接映射。
我決定在類“ load”中包含一個方法,該方法在提供item_id
時檢索項目數據。 所以這是我的兩個問題:
這是否是分配類屬性的方式有意義,或者有更聰明的方法來執行此操作:
$sth = $dbh->query("SELECT * FROM items WHERE item_id = $item_id"); $sth->setFetchMode(PDO::FETCH_CLASS, 'Item'); while ($obj = $sth->fetch()) { foreach ($obj as $key => $value) { $this->$key = $value; } }
編輯:看到這些回答(可以肯定會引起有趣的閱讀)后,我意識到我可能沒有足夠詳細。
我認為使用ORM庫對於我正在做的事情可能是過大的(只是個人愛好項目,對雇主而言不算什么),但實際上,無論如何,我不確定那是我真正需要的。 這就是為什么。 因為我可能有這樣的事情:
class InventoryItem extends Item
{
public $user_id;
public $quantity;
}
我還沒有真正考慮到這一點。 僅舉一個例子。 因此,我用來獲取數據的查詢可能看起來像這樣:
SELECT *
FROM items, inventories
WHERE item.item_id = inventories.item_id
AND user_id = $user_id;
換句話說,我必須創建一個可以正確提取該類數據的SQL語句,而我真的只需要知道是否應該傳遞數據庫句柄或在load方法中創建它,以及是否上面的代碼是分配屬性值的一種好方法。
另一個麻煩是我可能必須操縱一些數據(例如,如果其中一列正在存儲json編碼的數組或其他內容)。
我使用的是通用的數據庫對象類,然后有單獨的類(與數據庫中的不同表匹配),每個類對此進行了擴展。
數據庫對象類包含將行實例化為對象並執行任何操作的功能,擴展它們的類僅包含每個表對象的屬性。
最好在programmers.stackexchange上問這個問題,因為它是一個開放式的問題,我想有很多不同的方法可以做到這一點並就此事發表意見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.