/** * Checks whether a pair of beans is related N-M. This function does not * check whether the beans are related in N:1 way. * The name may be bit confusing because two beans can be related in * various ways. This method only checks for many-to-many relations, for other * relations please use $bean->ownX where X is the type of the bean you are * looking for. * * @param RedBean_OODBBean $bean1 first bean * @param RedBean_OODBBean $bean2 second bean * * @return boolean */ public function areRelated(RedBean_OODBBean $bean1, RedBean_OODBBean $bean2) { return $this->associationManager->areRelated($bean1, $bean2); }
/** * Checks whether a pair of beans is related N-M. This function does not * check whether the beans are related in N:1 way. * * @param RedBean_OODBBean $bean1 first bean * @param RedBean_OODBBean $bean2 second bean * * @return bool $yesNo whether they are related */ public static function areRelated(RedBean_OODBBean $bean1, RedBean_OODBBean $bean2) { return self::$associationManager->areRelated($bean1, $bean2); }
/** * Test the database driver and low level functions. * * @return void */ public function testDriver() { $currentDriver = $this->currentlyActiveDriverID; R::store(R::dispense('justabean')); $adapter = new TroubleDapter(R::$toolbox->getDatabaseAdapter()->getDatabase()); $adapter->setSQLState('HY000'); $writer = new RedBean_QueryWriter_SQLiteT($adapter); $redbean = new RedBean_OODB($writer); $toolbox = new RedBean_ToolBox($redbean, $adapter, $writer); // We can only test this for a known driver... if ($currentDriver === 'sqlite') { try { $redbean->find('bean'); pass(); } catch (Exception $e) { var_dump($e->getSQLState()); fail(); } } $adapter->setSQLState(-999); try { $redbean->find('bean'); fail(); } catch (Exception $e) { pass(); } $beanA = R::dispense('bean'); $beanB = R::dispense('bean'); R::storeAll(array($beanA, $beanB)); $associationManager = new RedBean_AssociationManager($toolbox); $adapter->setSQLState('HY000'); // We can only test this for a known driver... if ($currentDriver === 'sqlite') { try { $associationManager->areRelated($beanA, $beanB); pass(); } catch (Exception $e) { fail(); } } $adapter->setSQLState(-999); try { $associationManager->areRelated($beanA, $beanA); fail(); } catch (Exception $e) { pass(); } try { $redbean->wipe('justabean'); fail(); } catch (Exception $e) { pass(); } $toolbox = R::$toolbox; $adapter = $toolbox->getDatabaseAdapter(); $writer = $toolbox->getWriter(); $redbean = $toolbox->getRedBean(); $pdo = $adapter->getDatabase(); $page = $redbean->dispense("page"); try { $adapter->exec("an invalid query"); fail(); } catch (RedBean_Exception_SQL $e) { pass(); } // Special data type description should result in magic number 99 (specified) if ($currentDriver == 'mysql') { asrt($writer->code(RedBean_QueryWriter_MySQL::C_DATATYPE_SPECIAL_DATE), 99); } if ($currentDriver == 'pgsql') { asrt($writer->code(RedBean_QueryWriter_PostgreSQL::C_DATATYPE_SPECIAL_DATE), 99); } if ($currentDriver == 'CUBRID') { asrt($writer->code(RedBean_QueryWriter_CUBRID::C_DATATYPE_SPECIAL_DATE), 99); } asrt((int) $adapter->getCell("SELECT 123"), 123); $page->aname = "my page"; $id = (int) $redbean->store($page); asrt((int) $page->id, 1); asrt((int) $pdo->GetCell("SELECT count(*) FROM page"), 1); asrt($pdo->GetCell("SELECT aname FROM page LIMIT 1"), "my page"); asrt((int) $id, 1); $page = $redbean->load("page", 1); asrt($page->aname, "my page"); asrt((bool) $page->getMeta("type"), TRUE); asrt(isset($page->id), TRUE); asrt($page->getMeta("type"), "page"); asrt((int) $page->id, $id); }