/** * @param \Engine\Mvc\Model\Query\Builder $queryBuilder * @param string $name * @param string $category * @param string $categoryName * @param string $where * @param string $emptyCategory * @param string $emptyItem * @param bool $multiselect * @param bool $fields * @param null $category_order * @return array */ static function prepareOptions(\Engine\Mvc\Model\Query\Builder $queryBuilder, $name = null, $category = null, $categoryName = null, $where = null, $emptyCategory = "n/a", $emptyItem = "n/a", $multiselect = false, &$fields = false, $category_order = null) { if ($emptyCategory === null) { $emptyCategory = self::EMPTY_CATEGORY; } if ($emptyItem === null) { $emptyItem = self::EMPTY_ITEM; } $model = $queryBuilder->getModel(); if (null !== $where) { if (!is_array($where)) { $where = [$where]; } foreach ($where as $whereItem) { $queryBuilder->where($whereItem); } } if (null !== $name) { $queryBuilder->columnsId()->setColumn($name, 'name'); } else { $queryBuilder->columnsId()->columnsName(); } if ($category) { if (!is_array($category)) { $category = array($category); } foreach ($category as $i => $cat) { if ($i == 0) { $queryBuilder->columnsJoinOne($cat, 'category'); if (null == $category_order) { $queryBuilder->orderBy('category, name'); } else { $queryBuilder->orderBy($category_order); } } else { $column = is_array($cat) ? end($cat) : $cat; $queryBuilder->columnsJoinOne($cat, $column); } } $data = ($result = $queryBuilder->getQuery()->execute()) === null ? [] : $result; $options = []; foreach ($data as $item) { if ($item['id'] === 0) { continue; } $category = trim($item['category']) ? $item['category'] : $emptyCategory; $options[$category][$item['id']] = trim($item['name']) ? $item['name'] : $emptyItem; } } else { $queryBuilder->orderNatural(); //$select->order('name'); $data = ($result = $queryBuilder->getQuery()->execute()) === null ? [] : $result; $options = []; foreach ($data as $item) { if ($item['id'] === 0) { continue; } $options[$item['id']] = trim($item['name']) ? $item['name'] : $emptyItem; } if ($multiselect) { //$options = [0 => $options]; } } return $options; }