Hello,
I use NotORM on my website, but I have a question,
This are my DB tables :
TABLE USER (id, nickname)
TABLE MESSAGE (id, USER_id_sender, USER_id_receiver, message)
How can I configure my NotOrm for fetch all message (just received for the example) ? And how to fetch them ?
Thanks,
Jeremy
class myStructure extends NotORM_Structure_Convention {
function getReferencedTable($name, $table) {
switch ($name) {
case 'sender':
case 'receiver':
return parent::getReferencedTable('user', $table);
}
return parent::getReferencedTable($name, $table);
}
}
$db = new NotORM($pdo, new myStructure());
$messages_received = $db->user[$user_id]->messages_received();
$messages_received = $db->user[$user_id]->messages()->via('sender_id');
$sender = $db->message[$message_id]->sender;$receiver = $db->message[$message_id]->receiver;
<?phperror_reporting(E_ALL);require __DIR__ . '/vendor/autoload.php';
$pdo = new PDO('sqlite::memory:');$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec(' CREATE TABLE USER ( id INT UNSIGNED NOT NULL PRIMARY KEY, nickname VARCHAR(63) NOT NULL );
CREATE TABLE MESSAGE ( id INT UNSIGNED NOT NULL PRIMARY KEY, USER_id_sender INT UNSIGNED NOT NULL, USER_id_receiver INT UNSIGNED NOT NULL, content TEXT NOT NULL, FOREIGN KEY (USER_id_sender) REFERENCES USER(id) ON DELETE CASCADE, FOREIGN KEY (USER_id_receiver) REFERENCES USER(id) ON DELETE CASCADE );
INSERT INTO USER(id, nickname) VALUES (1, "jeremy"); INSERT INTO USER(id, nickname) VALUES (2, "roger"); INSERT INTO USER(id, nickname) VALUES (3, "frank");
INSERT INTO MESSAGE(id, USER_id_sender, USER_id_receiver, content) VALUES (1, 1, 2, "yo"); INSERT INTO MESSAGE(id, USER_id_sender, USER_id_receiver, content) VALUES (2, 2, 1, "yo !"); INSERT INTO MESSAGE(id, USER_id_sender, USER_id_receiver, content) VALUES (3, 1, 2, "yeah !");
');
class myStructure extends NotORM_Structure_Convention { function getReferencedTable($name, $table) { switch ($name) {
case 'USER_id_sender': case 'USER_id_receiver': return parent::getReferencedTable('User', $table); } return parent::getReferencedTable($name, $table); }}
$NotORM = new NotORM($pdo, new myStructure());
$Jeremy = $NotORM->USER()->where('nickname=?', 'jeremy')->fetch();$Messages_sended = $Jeremy->MESSAGE()->via('USER_id_sender');$Messages_received = $Jeremy->MESSAGE()->via('USER_id_receiver');$Messages_all = null; // How to join sended and received ?
echo "USER";echo '<pre>' . print_r(iterator_to_array($Jeremy), true) . '</pre>';
echo "Messages sended";echo '<pre>' . print_r(array_map('iterator_to_array', iterator_to_array($Messages_sended)), true) . '</pre>';
echo "Messages received";echo '<pre>' . print_r(array_map('iterator_to_array', iterator_to_array($Messages_received)), true) . '</pre>';
$db = new NotORM($pdo, new myStructure());
$MESSAGES = $db->MESSAGE()->where('USER_id_receiver=?', 1);
foreach ($MESSAGES as $MESSAGE) {
$USER = $MESSAGE->USER()->via('USER_id_sender')->fetch();
// TBD
}
class myStructure extends NotORM_Structure_Convention {
function getReferencedTable($name, $table) {
switch ($name) {
case 'USER_id_sender':
case 'USER_id_receiver':
return parent::getReferencedTable('User', $table);
}
return parent::getReferencedTable($name, $table);
}
function getReferencingTable($name, $table) {
switch ($name) {
case 'USER_id_sender':
case 'USER_id_receiver':
return parent::getReferencedTable('User', $table);
}
return parent::getReferencedTable($name, $table);
}
}