34 parent::__construct($db);
35 if (!is_null($this->mTable)) {
36 $tableArr = explode(
'_', $this->mTable);
40 $this->mDirname = array_shift($tableArr);
41 $this->mDataname = implode(
'_', $tableArr);
42 $this->mTable = $this->db->prefix($this->mTable);
83 public function &
getObjects($criteria =
null, $limit =
null, $start =
null, $id_as_key =
false)
87 $sql =
'SELECT * FROM `' . $this->mTable .
'`';
90 $where = $this->_makeCriteria4sql($criteria);
92 if (trim((
string) $where)) {
93 $sql .=
' WHERE ' . $where;
97 foreach ($criteria->getSorts() as $sort) {
98 $sorts[] =
'`' . $sort[
'sort'] .
'` ' . $sort[
'order'];
100 if (
'' != $criteria->getSort()) {
101 $sql .=
' ORDER BY ' . implode(
',', $sorts);
104 if (
null === $limit) {
105 $limit = $criteria->getLimit();
108 if (
null === $start) {
109 $start = $criteria->getStart();
112 if (
null === $limit) {
116 if (
null === $start) {
122 $result = $db->query($sql, $limit, $start);
128 while ($row = $db->fetchArray($result)) {
129 $obj =
new $this->mClass();
131 $obj->assignVars($row);
135 $ret[$obj->get($this->mPrimary)] =& $obj;
155 public function getIdList($criteria =
null, $limit =
null, $start =
null)
159 $sql =
'SELECT `' . $this->mPrimary .
'` FROM `' . $this->mTable .
'`';
162 $where = $this->_makeCriteria4sql($criteria);
165 $sql .=
' WHERE ' . $where;
169 foreach ($criteria->getSorts() as $sort) {
170 $sorts[] =
'`' . $sort[
'sort'] .
'` ' . $sort[
'order'];
172 if (
'' != $criteria->getSort()) {
173 $sql .=
' ORDER BY ' . implode(
',', $sorts);
176 if (
null === $limit) {
177 $limit = $criteria->getLimit();
180 if (
null === $start) {
181 $start = $criteria->getStart();
184 if (
null === $limit) {
188 if (
null === $start) {
193 $result = $this->db->query($sql, $limit, $start);
199 while ($row = $this->db->fetchArray($result)) {
200 $ret[] = $row[$this->mPrimary];
362 if ($criteria->hasChildElements()) {
363 $maxCount = $criteria->getCountChildElements();
364 $queryString = $this->_makeCriteria4sql($criteria->getChildElement(0));
365 for ($i = 1; $i < $maxCount; $i++) {
366 $queryString .=
' ' . $criteria->getCondition($i) .
' ' . $this->_makeCriteria4sql($criteria->getChildElement($i));
368 return '('.$queryString.
')';
373 $name = $criteria->getName();
374 $value = $criteria->getValue();
375 if (
null != $name && isset($obj->mVars[$name])) {
376 if (
null === $value) {
377 $criteria->operator =
'=' == $criteria->getOperator() ?
'IS' :
'IS NOT';
379 } elseif (in_array(strtoupper($criteria->operator), [
'IN',
'NOT IN'])) {
380 $value = is_array($value) ? $value : explode(
',', $value);
381 $typ = $obj->mVars[$name][
'data_type'];
382 foreach ($value as $val) {
383 $tmp[] = $this->_escapeValue($val, $typ);
386 $value =
'('.implode(
',', $tmp).
')';
391 $value = $this->_escapeValue($value, $obj->mVars[$name][
'data_type']);
394 $value = $this->db->quoteString($value);
397 return null != $name ? $name .
' ' . $criteria->getOperator() .
' ' . $value :
null;