public static function GetRelatedBeans($bean1, $type)
 {
     //Get a new association manager
     $association = new \RedBean_AssociationManager(self::Toolbox());
     //return the related beans of type $type
     return $association->related($bean, $type);
 }
Exemplo n.º 2
0
 /**
  * The opposite of related(). Returns all the beans that are not
  * associated with the bean provided.
  *
  * @param RedBean_OODBBean $bean   bean provided
  * @param string				$type   type of bean you are searching for
  * @param string				$sql    SQL for extra filtering
  * @param array				$values values to be inserted in SQL slots
  *
  * @return array $beans beans
  */
 public static function unrelated(RedBean_OODBBean $bean, $type, $sql = null, $values = array())
 {
     $idfield = self::$writer->getIDField($type);
     $keys = self::$associationManager->related($bean, $type);
     $rows = self::$writer->selectRecord($type, array($idfield => $keys), array($sql, $values), false, true);
     return self::$redbean->convertToBeans($type, $rows);
 }
Exemplo n.º 3
0
 /**
  * Fetches related domain objects.
  * @param string $className
  * @param mixed $constructorArg
  * @return mixed $models
  */
 protected function related($className, $constructorArg = null)
 {
     $models = array();
     $model = new $className();
     $keys = $this->associationManager->related($this->bean, $model->getBeanType());
     foreach ($keys as $key) {
         $modelItem = new $className($constructorArg);
         $modelItem->find((int) $key);
         $models[$key] = $modelItem;
     }
     return $models;
 }
Exemplo n.º 4
0
 /**
  * Returns all beans that have been tagged with one or more
  * of the specified tags.
  * 
  * Tag list can be either an array with tag names or a comma separated list
  * of tag names.
  *
  * @param string       $beanType type of bean you are looking for
  * @param array|string $tagList  list of tags to match
  *
  * @return array
  */
 public function tagged($beanType, $tagList)
 {
     $tags = $this->extractTagsIfNeeded($tagList);
     $collection = array();
     $tags = $this->redbean->find('tag', array('title' => $tags));
     if (is_array($tags) && count($tags) > 0) {
         $collectionKeys = $this->associationManager->related($tags, $beanType);
         if ($collectionKeys) {
             $collection = $this->redbean->batch($beanType, $collectionKeys);
         }
     }
     return $collection;
 }
Exemplo n.º 5
0
 /**
  * Test legacy methods, backward compatibility with removed
  * setAssoc function.
  * 
  * @return void
  */
 public function testBackwardCompat()
 {
     $toolbox = R::$toolbox;
     $adapter = $toolbox->getDatabaseAdapter();
     $writer = $toolbox->getWriter();
     $redbean = $toolbox->getRedBean();
     $pdo = $adapter->getDatabase();
     $rb = $redbean;
     $testA = $rb->dispense('testA');
     $testB = $rb->dispense('testB');
     $a = new RedBean_AssociationManager($toolbox);
     try {
         $a->related($testA, "testB");
         pass();
     } catch (Exception $e) {
         fail();
     }
     $user = $redbean->dispense("user");
     $user->name = "John";
     $redbean->store($user);
     $page = $redbean->dispense("page");
     $page->name = "John's page";
     $redbean->store($page);
     $page2 = $redbean->dispense("page");
     $page2->name = "John's second page";
     $redbean->store($page2);
     $a = new RedBean_AssociationManager($toolbox);
     $a->associate($page, $user);
     asrt(count($a->related($user, "page")), 1);
     $a->associate($user, $page2);
     asrt(count($a->related($user, "page")), 2);
     // Can we fetch the assoc ids themselves?
     $pageKeys = $a->related($user, "page");
     $pages = $redbean->batch("page", $pageKeys);
     $links = $redbean->batch("page_user", $a->related($user, "page", TRUE));
     asrt(count($links), 2);
     // Confirm that the link beans are ok.
     $link = array_pop($links);
     asrt(isset($link->page_id), TRUE);
     asrt(isset($link->user_id), TRUE);
     asrt(isset($link->id), TRUE);
     $link = array_pop($links);
     asrt(isset($link->page_id), TRUE);
     asrt(isset($link->user_id), TRUE);
     asrt(isset($link->id), TRUE);
     $a->unassociate($page, $user);
     asrt(count($a->related($user, "page")), 1);
     $a->clearRelations($user, "page");
     asrt(count($a->related($user, "page")), 0);
     $user2 = $redbean->dispense("user");
     $user2->name = "Second User";
     set1toNAssoc($a, $user2, $page);
     set1toNAssoc($a, $user, $page);
     asrt(count($a->related($user2, "page")), 0);
     asrt(count($a->related($user, "page")), 1);
     set1toNAssoc($a, $user, $page2);
     asrt(count($a->related($user, "page")), 2);
     $pages = $redbean->batch("page", $a->related($user, "page"));
     asrt(count($pages), 2);
     $apage = array_shift($pages);
     asrt($apage->name == "John's page" || $apage->name == "John's second page", TRUE);
     $apage = array_shift($pages);
     asrt($apage->name == "John's page" || $apage->name == "John's second page", TRUE);
     // Test save on the fly
     $page = $redbean->dispense("page");
     $page2 = $redbean->dispense("page");
     $page->name = "idless page 1";
     $page2->name = "idless page 1";
     $a->associate($page, $page2);
     asrt($page->id > 0, TRUE);
     asrt($page2->id > 0, TRUE);
     $idpage = $page->id;
     $idpage2 = $page2->id;
     $page = $redbean->dispense("page");
     $page->name = "test page";
     $id = $redbean->store($page);
     $user = $redbean->dispense("user");
     $a->unassociate($user, $page);
     pass();
     // No error
     $a->unassociate($page, $user);
     pass();
     // No error
     $a->clearRelations($page, "user");
     pass();
     // No error
     $a->clearRelations($user, "page");
     pass();
     // No error
     $a->associate($user, $page);
     pass();
     asrt(count($a->related($user, "page")), 1);
     asrt(count($a->related($page, "user")), 1);
     $a->clearRelations($user, "page");
     pass();
     // No error
     asrt(count($a->related($user, "page")), 0);
     asrt(count($a->related($page, "user")), 0);
     $page = $redbean->load("page", $id);
     pass();
     asrt($page->name, "test page");
 }
Exemplo n.º 6
0
 $movie2 = $redbean2->dispense("movie");
 asrt(isset($movie2->movie_id), true);
 $movie2->name = "movie 2";
 $movieid2 = $redbean2->store($movie2);
 $movie1 = $redbean2->load("movie", $movieid);
 asrt($movie->name, "movie 1");
 $movie2 = $redbean2->load("movie", $movieid2);
 asrt($movie2->name, "movie 2");
 $movies = $redbean2->batch("movie", array($movieid, $movieid2));
 asrt(count($movies), 2);
 asrt($movies[$movieid]->name, "movie 1");
 asrt($movies[$movieid2]->name, "movie 2");
 $toolbox2 = new RedBean_ToolBox($redbean2, $adapter, $writer2);
 $a2 = new RedBean_AssociationManager($toolbox2);
 $a2->associate($movie1, $movie2);
 $movies = $a2->related($movie1, "movie");
 asrt(count($movies), 1);
 asrt((int) $movies[0], (int) $movieid2);
 $movies = $a2->related($movie2, "movie");
 asrt(count($movies), 1);
 asrt((int) $movies[0], (int) $movieid);
 $genre = $redbean2->dispense("genre");
 $genre->name = "western";
 $a2->associate($movie, $genre);
 $movies = $a2->related($genre, "movie");
 asrt(count($movies), 1);
 asrt((int) $movies[0], (int) $movieid);
 $a2->unassociate($movie, $genre);
 $movies = $a2->related($genre, "movie");
 asrt(count($movies), 0);
 $a2->clearRelations($movie, "movie");
Exemplo n.º 7
0
 /**
  * Returns all beans that have been tagged with one of the tags given.
  *
  * @param  $beanType type of bean you are looking for
  * @param  $tagList  list of tags to match
  *
  * @return array
  */
 public function tagged($beanType, $tagList)
 {
     if ($tagList !== false && !is_array($tagList)) {
         $tags = explode(",", (string) $tagList);
     } else {
         $tags = $tagList;
     }
     $collection = array();
     $tags = $this->redbean->find('tag', array('title' => $tags));
     if (is_array($tags) && count($tags) > 0) {
         $collectionKeys = $this->associationManager->related($tags, $beanType);
         if ($collectionKeys) {
             $collection = $this->redbean->batch($beanType, $collectionKeys);
         }
     }
     return $collection;
 }
Exemplo n.º 8
0
 /**
  * Convenience Method
  * @param RedBean_OODBBean $bean
  * @param string $type
  * @param string $sql
  * @param array $values
  * @return array $beans
  */
 public static function findRelated(RedBean_OODBBean $bean, $type, $sql, $values = array())
 {
     $keys = self::$associationManager->related($bean, $type);
     $sql = str_replace(":keys", implode(",", $keys), $sql);
     return self::find($type, $sql, $values);
 }
Exemplo n.º 9
0
 /**
  * Test self referential N-M relations (page_page).
  * 
  * @return void
  */
 public function testSelfReferential()
 {
     $toolbox = R::$toolbox;
     $adapter = $toolbox->getDatabaseAdapter();
     $writer = $toolbox->getWriter();
     $redbean = $toolbox->getRedBean();
     $pdo = $adapter->getDatabase();
     $a = new RedBean_AssociationManager($toolbox);
     $page = $redbean->dispense("page");
     $page->name = "John's page";
     $idpage = $redbean->store($page);
     $page2 = $redbean->dispense("page");
     $page2->name = "John's second page";
     $idpage2 = $redbean->store($page2);
     $a->associate($page, $page2);
     $ids = $a->related($page, "page");
     asrt(count($ids), 1);
     asrt(intval(array_pop($ids)), intval($idpage2));
     $ids = $a->related($page2, "page");
     asrt(count($ids), 1);
     asrt(intval(array_pop($ids)), intval($idpage));
     $page3 = $redbean->dispense("page");
     $page3->name = "third";
     $page4 = $redbean->dispense("page");
     $page4->name = "fourth";
     $a->associate($page3, $page2);
     $a->associate($page2, $page4);
     $a->unassociate($page, $page2);
     asrt(count($a->related($page, "page")), 0);
     $ids = $a->related($page2, "page");
     asrt(count($ids), 2);
     asrt(in_array($page3->id, $ids), TRUE);
     asrt(in_array($page4->id, $ids), TRUE);
     asrt(in_array($page->id, $ids), FALSE);
     asrt(count($a->related($page3, "page")), 1);
     asrt(count($a->related($page4, "page")), 1);
     $a->clearRelations($page2, "page");
     asrt(count($a->related($page2, "page")), 0);
     asrt(count($a->related($page3, "page")), 0);
     asrt(count($a->related($page4, "page")), 0);
     try {
         $a->associate($page2, $page2);
         pass();
     } catch (RedBean_Exception_SQL $e) {
         fail();
     }
     $pageOne = $redbean->dispense("page");
     $pageOne->name = "one";
     $pageMore = $redbean->dispense("page");
     $pageMore->name = "more";
     $pageEvenMore = $redbean->dispense("page");
     $pageEvenMore->name = "evenmore";
     $pageOther = $redbean->dispense("page");
     $pageOther->name = "othermore";
     set1toNAssoc($a, $pageOther, $pageMore);
     set1toNAssoc($a, $pageOne, $pageMore);
     set1toNAssoc($a, $pageOne, $pageEvenMore);
     asrt(count($a->related($pageOne, "page")), 2);
     asrt(count($a->related($pageMore, "page")), 1);
     asrt(count($a->related($pageEvenMore, "page")), 1);
     asrt(count($a->related($pageOther, "page")), 0);
 }
Exemplo n.º 10
0
 /**
  * Tests freezing the database.
  * After freezing the database, schema modifications are no longer
  * allowed and referring to missing columns will now cause exceptions.
  * 
  * @return void
  */
 public function testFreezer()
 {
     $toolbox = R::$toolbox;
     $adapter = $toolbox->getDatabaseAdapter();
     $writer = $toolbox->getWriter();
     $redbean = $toolbox->getRedBean();
     $pdo = $adapter->getDatabase();
     $a = new RedBean_AssociationManager($toolbox);
     $post = $redbean->dispense('post');
     $post->title = 'title';
     $redbean->store($post);
     $page = $redbean->dispense('page');
     $page->name = 'title';
     $redbean->store($page);
     $page = $redbean->dispense("page");
     $page->name = "John's page";
     $idpage = $redbean->store($page);
     $page2 = $redbean->dispense("page");
     $page2->name = "John's second page";
     $idpage2 = $redbean->store($page2);
     $a->associate($page, $page2);
     $redbean->freeze(TRUE);
     $page = $redbean->dispense("page");
     $page->sections = 10;
     $page->name = "half a page";
     try {
         $id = $redbean->store($page);
         fail();
     } catch (RedBean_Exception_SQL $e) {
         pass();
     }
     $post = $redbean->dispense("post");
     $post->title = "existing table";
     try {
         $id = $redbean->store($post);
         pass();
     } catch (RedBean_Exception_SQL $e) {
         fail();
     }
     asrt(in_array("name", array_keys($writer->getColumns("page"))), TRUE);
     asrt(in_array("sections", array_keys($writer->getColumns("page"))), FALSE);
     $newtype = $redbean->dispense("newtype");
     $newtype->property = 1;
     try {
         $id = $redbean->store($newtype);
         fail();
     } catch (RedBean_Exception_SQL $e) {
         pass();
     }
     $logger = RedBean_Plugin_QueryLogger::getInstanceAndAttach($adapter);
     // Now log and make sure no 'describe SQL' happens
     $page = $redbean->dispense("page");
     $page->name = "just another page that has been frozen...";
     $id = $redbean->store($page);
     $page = $redbean->load("page", $id);
     $page->name = "just a frozen page...";
     $redbean->store($page);
     $page2 = $redbean->dispense("page");
     $page2->name = "an associated frozen page";
     $a->associate($page, $page2);
     $a->related($page, "page");
     $a->unassociate($page, $page2);
     $a->clearRelations($page, "page");
     $items = $redbean->find("page", array(), array("1"));
     $redbean->trash($page);
     $redbean->freeze(FALSE);
     asrt(count($logger->grep("SELECT")) > 0, TRUE);
     asrt(count($logger->grep("describe")) < 1, TRUE);
     asrt(is_array($logger->getLogs()), TRUE);
 }
Exemplo n.º 11
0
Arquivo: rb.php Projeto: u007/FlexiPHP
 /**
  * Returns all the beans associated with $bean.
  * @param RedBean_OODBBean $bean
  * @param string $type
  * @return array $beans
  */
 public static function related(RedBean_OODBBean $bean, $type)
 {
     return self::$redbean->batch($type, self::$associationManager->related($bean, $type));
 }