NotORM:如何获取数据?

时间:2012-08-23 13:06:15

标签: php notorm

我在使用选择时遇到了麻烦,我尝试阅读文档但是不太清楚,讨论它的论坛很少而且不活跃。

我想做一个简单的选择,所以我尝试了:

$applications = $NOTORM->user_types()
                        ->select('id, group_title')
                        ->where('id', 1);
return $applications;

然而,这给了我一个NotORM对象,我没有看到正常情况下得到的行:SELECT id, group_title FROM user_types WHERE id = 1

我尝试使用fetch()但不确定如何使用它。任何见解?

7 个答案:

答案 0 :(得分:5)

实际上,NotORM的作者推荐使用:

<?php
array_map('iterator_to_array', iterator_to_array($result));
?>
祝你好运!

答案 1 :(得分:4)

我遇到了同样的问题,直到我意识到你必须循环结果。 试试

foreach($applications as $application) {
     echo $application["id"] . ": " . $application["group_title"]
}

或者,正如您所提到的,您可以使用fetch(),一次只能获取一行。

$row=$applications->fetch();
echo $row["id"];

修改

要将所有行数据作为普通关联数组而不是NotORM对象,我遇到了两种技术:

  1. foreach($row as $key => $value) { $data[$key]=$value; }
  2. $data=iterator_to_array($row); - 我没有使用NotOrm函数执行此操作,但我发现Notorm在内部(某处)使用此技术。

答案 2 :(得分:0)

要实际获得 行的数据数组,您必须访问NotORM_Row-&gt;行参数,但它是' protected '默认情况下。所以要像这样使用它:

$row = $NOTORM->user_types()
              ->select('id, group_title')
              ->where('id', 1)
              ->fetch()->row;                //here is the magic :)

您首先需要在'NotORM / Row.php'中'破解'核心NotORM_Row类,

替换

protected $row, $result;

public $row, $result;

注意:您必须在NotORM结果上调用fetch(),因为它将返回放置行数据的NotORM_Row对象。

答案 3 :(得分:0)

只需在NotORM_Result类中的某处添加此代码:

function result() { return (Object)$this->result_array(); }
function result_array() {
    foreach($this as $row) {    $ret[] = iterator_to_array($row);   }
    return $ret;
}

并使用它:

    $applications = $NOTORM->user_types()
                            ->select('id, group_title')
                            ->where('id', 1);
    return $applications->result(); //To return it as an Plain Object
//or
   return $applications->result_array();  //To return it as a Assoc Array

答案 4 :(得分:0)

尝试定义此PHP函数:

function getArray($obj){
  $arr = array();

  foreach ($obj as $objSingle) {

      $arrRow = array();
      foreach ($objSingle as $key => $value) {
          $arrRow[$key] = $value;
      }
      $arr[] = $arrRow;
  }
  return $arr;

}

通过致电:

使用它
$arr = getArray($applications);

答案 5 :(得分:0)

NotOrm添加了一个返回原始行数据而不是名称jsonSerialize的函数。您可以通过此函数获取行数据数组。

示例:

$row=$db->MyTable->where('X','93054660084')->fetch();

var_dump($row->jsonSerialize());

输出:

array (size=5)
  'X' => string '93054660084' (length=9)
  'Idc' => string '1132' (length=4)
  'IdH' => string '1' (length=1)
  'Mab' => string '0' (length=1)
  'Tar' => string 'xsderf' (length=10)

对于多记录数据,您需要使用foreach并将其应用于所有记录。

答案 6 :(得分:0)

<块引用>

可以这样做。

 function comboBuilder2($tbl, $name, $lable, $value, $value2, $value3, $selected = NULL, $cond, $sort = NULL){
global $db;
$html = '';
$sort1 = (!empty($sort)) ? "order by sort asc" : '';
$sql = "select * from " . $tbl . " " . $cond . " " . $sort1 . "";
//echo $sql;
$sth = $db->query($sql);
$rs = $sth->fetchAll();
//print_r($rs);
if ($rs[0] > 0) {
    foreach ($rs as $row) {
        if ($selected == $row[$value])
            $sel = 'selected = "selected" ';
        else
            $sel = '';
        echo $row[$lable];
        //$html .= '<option value="' . $row[$value] . '"  data-min="' . $row[$value2] . '"  data-max="' . $row[$value3] . '" ' . $sel . '>' . $row[$lable] . '</option>';
    }
    $html .= '';
}
return $html;

}