CakePhp使用另一个表中的valueField创建列表

时间:2017-04-28 11:06:09

标签: cakephp

我想从一个表创建列表,使用包含另一个表,并从第一个表生成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;

1 个答案:

答案 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']);

工作很好