我已经使用 list 从模型中获取数据并且效果很好

这个例子来自 Cakephp 文档

$query = $articles->find('list', [
    'keyField' => 'slug',
    'valueField' => 'title'
]);
$data = $query->toArray();

我有一个表名假期



所以想要一个以日期为键和假期为值的列表
像这样的东西
[
    '2016-01-01'=>'New Year',
    '2016-01-26'=>'Republic Day',
]

所以我通过蛋糕烘焙创建模型并使用此代码来实现它
$holidays = TableRegistry::get('Holidays');
$holidays = $holidays->find('list',[
    'keyField' => 'date',
    'valueField'=>'name',
])->toArray();

但它给了我错误



当我使用名称更改日期的 keyField 时,效果很好。

这是日志



任何帮助都受到高度赞赏

最佳答案

问题:

问题是,对于 'date' 字段,CakePHP 3 返回一个对象,而不是一个字符串:

'date' => object(Cake\I18n\FrozenDate) {
    'time' => '1997-01-03T00:00:00+00:00',
    'timezone' => 'UTC',
    'fixedNowTime' => false
},

尝试将其用作 key 不起作用,并引发您看到的错误。

如何处理:

根据 this area in the CakePHP book ,为了适应这种情况,您可以:



TLDR 这样做:
$query = $articles->find('list', [
    'keyField' => function ($e) {
         return $e->date->format('Y-m-d');
     },
    'valueField' => 'title'
]);

工作原理说明:

基本上,它将每个实体的值(在您的情况下每篇文章)放入变量 $e 中,并允许您使用/修改它的数据,并返回您想要用作键(或值)字段的字符串。在上面的例子中,它获取 date 对象,并在返回它作为键之前将其格式化为一个字符串。

关于php - 在列表 Cakephp 3 中将日期设置为 keyField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36926908/

10-16 13:22