我想从一个表创建列表,使用包含另一个表,并从第一个表生成keyField,但从另一个表+键生成valueField。
我有表CustomerNumbers(key => customer_number) - >用户 - >群组(值=>名称) 需要创建列表,其中所有CustomerNumbers.customer_number为键,Groups.name加键为值。
这是我的查询(另外,我不想让标准的经典php foreach创建列表)
$customerNumbers = $customerNumbersTable
->find('list', [
'keyField' => 'customer_number',
'valueField' => 'user.group.name' . ' ' . 'customer_number'
])
->group([
'customer_number'
])
->contain('Users.Groups')
->where(['customer_number >' => 0]);
结果应该像
(int) 11010080 => Frist group 11010080,
(int) 20000710 => Second group 20000710,
(int) 20001205 => Third group 20001205,
这也不是重复的问题@drmonkeyninja,因为在您的示例(Question)中,您需要使用单个模型中的虚拟字段选项(例如模型用户,并将名字和姓氏作为一个字段)。在我的情况下,我需要来自模型客户编号的虚拟字段和模型组中的另一个字段。
这是纯PHP的解决方案,但我希望也有CakePhp的灵魂。
$getCustomerNumbers = $customerNumbersTable->find('all')
->group([
'customer_number'
])
->contain('Users.Groups')
->hydrate(false);
$customerNumbers = [];
foreach($getCustomerNumbers as $key => $val):
$customerNumbers[$val['customer_number']] =
$val['user']['group']['first_name'] .
$val['user']['group']['last_name'] .
' ('. $val['customer_number'].')';
endforeach;
答案 0 :(得分:0)
我的例子是在表格中找到名称不同的国家/地区:
$ countries = TableRegistry :: get('地址') - >找到(' list', [ '关键字段' => ' COUNTRY_ID&#39 ;, ' valueField' => function($ row){return $ row-> country-> name;}
]) - >包含(['国家']) - >其中([' contact_id IS NOT' => null]) - 基团([' COUNTRY_ID']) - >订单([' Countries.name' =>' asc']);
工作很好