我在Propel中有以下标准:
$q = UserQuery::create();
$q->select(array('id', 'name'));
$q->orderBy('name');
$q->setOffset($offset);
$q->setLimit($limit);
return $q->find();
这工作正常,并给了我一个二维数组,内部数组中有 id 和名称键,即
array( array("id" => 1, "name" => 'A'), array("id" => 2, "name" => 'B') )
但是,如果我运行以下内容:
$q = UserQuery::create();
$q->select(array('id'));
$q->orderBy('id');
$q->setOffset($offset);
$q->setLimit($limit);
return $q->find();
它给了我一个一维数组,没有列键,只有索引,即
array(1, 2)
如果我使用 PropelArrayFormatter:
$q = UserQuery::create();
$q->select(array('id'));
$q->orderBy('id');
$q->setOffset($offset);
$q->setLimit($limit);
$q->setFormatter('PropelArrayFormatter');
return $q->find();
它使用空值水化整个对象:
array( array("id" => 1, "name" => null, "hash" => null, "last_login" => null), array("id" => 2, "name" => null, "hash" => null, "last_login" => null) )
如果我添加:
$q->setFormatter('PropelArrayFormatter');
然后我得到:
PHP Notice: Undefined offset: 2 in BaseUser.php on line 1518
PHP Notice: Undefined offset: 3 in BaseUser.php on line 1519
PHP Notice: Undefined offset: 4 in BaseUser.php on line 1520
PHP Notice: Undefined offset: 5 in BaseUser.php on line 1521
PHP Notice: Undefined offset: 6 in BaseUser.php on line 1522
PHP Notice: Undefined offset: 7 in BaseUser.php on line 1523
PHP Notice: Undefined offset: 8 in BaseUser.php on line 1524
PHP Notice: Undefined offset: 9 in BaseUser.php on line 1525
PHP Notice: Undefined offset: 10 in BaseUser.php on line 1526
PHP Notice: Undefined offset: 11 in BaseUser.php on line 1527
PHP Notice: Undefined offset: 12 in BaseUser.php on line 1528
PHP Notice: Undefined offset: 13 in BaseUser.php on line 1529
PHP Notice: Undefined offset: 14 in BaseUser.php on line 1530
PHP Notice: Undefined offset: 15 in BaseUser.php on line 1531
PHP Notice: Undefined offset: 16 in BaseUser.php on line 1532
PHP Notice: Undefined offset: 17 in BaseUser.php on line 1533
PHP Notice: Undefined offset: 18 in BaseUser.php on line 1534
PHP Notice: Undefined offset: 19 in BaseUser.php on line 1535
PHP Notice: Undefined offset: 20 in BaseUser.php on line 1536
并且什么都不返回。我也尝试过PropelSimpleArrayFormatter,它永远不会返回关联数组:
$q->setFormatter('PropelSimpleArrayFormatter');
结果:
PropelArrayCollection::__set_state(array(
0 => '123',
1 => '126',
2 => '133',
3 => '242',
4 => '256',
5 => '272',
6 => '283',
7 => '284',
8 => '474',
9 => '617',
))
如果您
限制所选列,Propel会默认使用SimpleArrayFormatter
,如您所见,它会做一些方便的事情。
如果要坚持正常行为,请将正常ArrayFormatter
设置为格式化程序:
$q->setFormatter('PropelRuntimeFormatterArrayFormatter');