我在使用选择时遇到了麻烦,我尝试阅读文档但是不太清楚,讨论它的论坛很少而且不活跃。
我想做一个简单的选择,所以我尝试了:
$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()但不确定如何使用它。任何见解?
答案 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对象,我遇到了两种技术:
foreach($row as $key => $value) {
$data[$key]=$value;
}
$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;
}