我已经使用 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/