如何使 Propel 保留与单数选择的关联格式



我在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');

最新更新