Несколько отношений в RedBean

Я создаю систему обмена сообщениями, используя ReadBean 3.5.1 (с MySQL). У каждого пользователя может быть несколько сообщений, поэтому для RedBean это простое отношение «один ко многим», например:

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

$message->stuff = "Hello world";

$sender->ownMessage[] = $message;

Сейчас я хочу связать пользователя recipient с сообщением, используя абстракцию RedBean. Я могу получить идентификатор получателя и сохранить его в столбце таблицы messages вручную, но есть ли способ сделать это с помощью RedBean?


person Bojangles    schedule 13.11.2013    source источник


Ответы (1)


Решение этой проблемы на самом деле немного отличается от того, что было опубликовано. Вам нужно создать сообщение и назначить ему две пользовательские модели, а не наоборот. Вот пример:

// Make some models
list($sender, $recipient) = R::dispense('user', 2);
$message = R::dispense('message');

// Set some data
$sender->name = 'Sender';
$recipient->name = 'Recipient';
$message->title = "Hello world";

// Associate users and message
$message->sender = $sender;
$message->recipient = $recipient;

// Store everything
R::store($message);

Действительно легко. RedBean заботится о сохранении обновленной информации о пользователе при вызове R::store($message). Тогда таблица сообщений выглядит так:

+----+-------------+-----------+--------------+
| id | title       | sender_id | recipient_id |
+----+-------------+-----------+--------------+
|  6 | Hello world |         3 |            4 |
+----+-------------+-----------+--------------+
person Bojangles    schedule 14.11.2013