Вам не хватает пары ключевых моментов для использования DataMapper для 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.
В этом запросе вы получите все данные пользователя и сообщения для некоторого идентификатора сообщения.Теперь это полупростой случай, потому что я предполагаю, что сообщение может быть только от одного пользователя.
Для поля to с другой стороны, я предполагаю, что вы должны использовать реляционную таблицу.Чтобы использовать DM для него, вы должны назвать таблицу как-то как users_messages
, но опять же, почему вам нужно использовать DM, когда она действительно избыточна.
Теперь для поля from у вас есть отношение многие ко многим, потому чтосообщение может иметь много пользователей, которым оно было, и пользователь может иметь много отправленных им сообщений.
Итак, создайте таблицу, подобную этой
CREATE TABLE message_to (
user_id BIGINT UNSIGNED NOT NULL,
message_to_id BIGING UNSIGNED NOT NULL,
PRIMARY KEY (user_id, message_to_id),
);
Если вы хотите сделать это правильно, вы также будете использовать внешние ключи, но это зависит от вашей БД
Теперь вы можете запрашиватьочень легко и получить всех пользователей сообщение было отправлено.
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, и вам нужно изучить их синтаксис.