2

我在使用选择时遇到问题,我尝试阅读文档,但不太清楚,谈论它的论坛很少且不活跃。

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

$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() 但不确定如何使用它。有什么见解吗?

4

7 回答 7

7

其实NotORM的作者推荐的是使用:

<?php
array_map('iterator_to_array', iterator_to_array($result));
?>

祝你好运!

于 2014-05-13T19:35:08.503 回答
4

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

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

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

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

编辑:

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

  1. foreach($row as $key => $value) { $data[$key]=$value; }
  2. $data=iterator_to_array($row);- 我还没有找到执行此操作的 NotOrm 函数,但我发现 Notorm 在内部(某处)使用此技术。
于 2012-11-12T16:30:09.363 回答
0

要实际获取行的数据数组,您必须访问 NotORM_Row->row 参数,但默认情况下它是“受保护的”。所以像这样使用它:

$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 对象。

于 2012-12-05T16:11:18.430 回答
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
于 2014-04-02T10:31:17.573 回答
0

NotOrm 添加了一个函数,该函数返回原始行数据而不是 names 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 并将其应用于所有记录。

于 2019-06-16T08:06:27.413 回答
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);
于 2015-10-14T05:14:08.670 回答
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;

}

于 2021-07-19T10:39:53.317 回答