您錯過了使用DataMapper for CodeIgniter的幾個要點。首先,你需要做一些非常簡單而重要的事情。 DataMapper(DM)使用規範化的數據庫命名來查找關係。這意味着如果你查詢你的數據庫。現在,對於兩列使用DM有點困難,我認爲你真的不需要它。
首先,如果你不使用你的DM真的只需要兩個查詢
SELECT u.*, m.* FROM messages AS m, users AS u WHERE m.from = u.id AND m.id = SOME_ID.
此查詢將讓你所有的用戶信息和郵件詳情某些消息ID。 現在這是半簡單的情況,因爲我假設一條消息只能來自一個用戶。
對於字段另一方面,我會假設你應該使用關係表。要使用DM爲它,你必須命名錶如users_messages
,但爲什麼你需要使用DM時,它真的是矯枉過正。
現在對於從外地來說,你有多對多的關係,因爲一條消息可以有很多用戶,並且用戶可以有很多他們發送的消息。
因此,創建一個表像這樣
CREATE TABLE message_to (
user_id BIGINT UNSIGNED NOT NULL,
message_to_id BIGING UNSIGNED NOT NULL,
PRIMARY KEY (user_id, message_to_id),
);
如果你想這樣做的權利,你也將使用外鍵,但是這取決於你的DB
現在,您可以查詢真正輕鬆獲得所有的用戶發送了一條消息。
SELECT u.*, m.* FROM users AS u, m AS messages JOIN messages_to AS m_t ON (u.id = m_t.user_id)
而查詢其他方式同樣簡單,獲取用戶發送的所有消息。
請記住,只是因爲像DM這樣的工具並不意味着它是工作的最佳工具,實際上在這種情況下使用DM會導致相當不錯的開銷。
這樣做與DM需要相同的東西,你不能命名你的表/列,因爲你認爲合適,你需要一個類爲每個表創建它與其他表的關係。
含義你有很多額外的工作使用DM,你需要學習他們的語法。
我一直在使用DM,而現在我剛開始覺得它的方式不僅僅是幫助。有時候它很棒,但是有很多次它確實需要更多的代碼,更多的文件和更多的查詢,並且支持不一定是最優的命名約定。可能是因爲我沒有以最佳方式使用它。 – 2011-05-04 15:22:24