/** * Internal method. * Returns the many-to-many related rows of table $type for bean $bean using additional SQL in $sql and * $bindings bindings. If $getLinks is TRUE, link rows are returned instead. * * @param RedBean_OODBBean $bean reference bean * @param string $type target type * @param boolean $getLinks TRUE returns rows from the link table * @param string $sql additional SQL snippet * @param array $bindings bindings * * @return array * * @throws RedBean_Exception_Security * @throws RedBean_Exception_SQL */ private function relatedRows($bean, $type, $getLinks = FALSE, $sql = '', $bindings = array()) { if (!is_array($bean) && !$bean instanceof RedBean_OODBBean) { throw new RedBean_Exception_Security('Expected array or RedBean_OODBBean but got:' . gettype($bean)); } $ids = array(); if (is_array($bean)) { $beans = $bean; foreach ($beans as $singleBean) { if (!$singleBean instanceof RedBean_OODBBean) { throw new RedBean_Exception_Security('Expected RedBean_OODBBean in array but got:' . gettype($singleBean)); } $ids[] = $singleBean->id; } $bean = reset($beans); } else { $ids[] = $bean->id; } $sourceType = $bean->getMeta('type'); try { if (!$getLinks) { return $this->writer->queryRecordRelated($sourceType, $type, $ids, $sql, $bindings); } else { return $this->writer->queryRecordLinks($sourceType, $type, $ids, $sql, $bindings); } } catch (RedBean_Exception_SQL $exception) { $this->handleException($exception); return array(); } }