Cakephp 3:在关联表的表单下拉列表中显示两个值

Cakephp 3:在关联表的表单下拉列表中显示两个值,cakephp,cakephp-3.x,Cakephp,Cakephp 3.x,我有三张桌子: 预算场馆-属于年度运营预算 年度运营预算有一套完整的制度 在我的预算收入添加表中,第一个选项是预算年度和机构 public function add() { $budgetRevenue = $this->BudgetRevenues->newEntity(); $associated = [ 'RevenueTitles', 'AnnualOperatingBudgets', 'AnnualOperatingBudgets.

我有三张桌子:

预算场馆-属于年度运营预算

年度运营预算有一套完整的制度

在我的预算收入添加表中,第一个选项是预算年度和机构

public function add()
    {
        $budgetRevenue = $this->BudgetRevenues->newEntity();
        $associated = [ 'RevenueTitles',  'AnnualOperatingBudgets', 'AnnualOperatingBudgets.Azinstitutions'];
        if ($this->request->is('post')) {
            $budgetRevenue = $this->BudgetRevenues->patchEntity($budgetRevenue, $this->request->getData(), ['associated' => $associated]);
            if ($this->BudgetRevenues->save($budgetRevenue)) {
                $this->Flash->success(__('The budget revenue has been saved.'));

                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error(__('The budget revenue could not be saved. Please, try again.'));
        }
        $annualOperatingBudgets = $this->BudgetRevenues->AnnualOperatingBudgets->find('list', ['keyField' => 'id', 'valueField' => ['budget_year', 'azinstitutions_id']]);
        $revenueTitles = $this->BudgetRevenues->RevenueTitles->find('list', ['keyField' => 'id', 'valueField' => 'revenue_title']);
        $this->set(compact('budgetRevenue', 'revenueTitles', 'annualOperatingBudgets', 'AnnualOperatingBudgets.Azinstitutions'));
    }
在我的代码中,我可以调用预算年(AnnualOperatingBudgets中的一个字段)和azinstitution_id。但我希望它显示机构的名称。这是在Azinstruptions表中,由AnnualOperatingBudgets表中的Azinstruption_id链接

现在表格显示的是2015年;1. 我想展示2015年ASU

我的add.ctp如下所示:

<div class="budgetRevenues form large-9 medium-8 columns content">
            <?= $this->Form->create($budgetRevenue) ?>
            <fieldset>
                <legend><?= __('Add Budget Revenue') ?></legend>
                <?php
                    echo $this->Form->control('annual_operating_budget_id', ['label' => 'Budget Year & Institution'], ['options' => $annualOperatingBudgets ]);
                    echo $this->Form->control('revenue');
                    echo $this->Form->control('revenue_title_id', ['options' => $revenueTitles]);
                ?>
            </fieldset>
            <?= $this->Form->button(__('Submit')) ?>
            <?= $this->Form->end() ?>
        </div>

您可以使用计算字段

$query = $this->BudgetRevenues->AnnualOperatingBudgets->find();

$annualOperatingBudgets = $query 
->find('list', [
    'keyField' => 'id', 
    'valueField' => 'full_year'
])
->select([
    'id',
    'full_year' => $query->func()->concat([
        'budget_year' => 'identifier',
        ' - ',
        'Azinstitutions.name' => 'identifier'
    ])
])
->contain(['Azinstitutions']);
另一种解决方案是在实体中使用虚拟财产

在您的
年度运营预算
实体中创建虚拟财产

// AnnualOperatingBudget.php
public function _getFullYear()
{
    return $this->budget_year.' - '.$this->azinstitution->name;
    // You should add a check to ensure 
    // that $this->azinstitution actually exists
}

//controller
$annualOperatingBudgets = $this->BudgetRevenues->AnnualOperatingBudgets
    ->find('list', ['keyField' => 'id', 'valueField' => 'full_year'])
    ->contain(['Azinstitutions]);

您可以使用计算字段

$query = $this->BudgetRevenues->AnnualOperatingBudgets->find();

$annualOperatingBudgets = $query 
->find('list', [
    'keyField' => 'id', 
    'valueField' => 'full_year'
])
->select([
    'id',
    'full_year' => $query->func()->concat([
        'budget_year' => 'identifier',
        ' - ',
        'Azinstitutions.name' => 'identifier'
    ])
])
->contain(['Azinstitutions']);
另一种解决方案是在实体中使用虚拟财产

在您的
年度运营预算
实体中创建虚拟财产

// AnnualOperatingBudget.php
public function _getFullYear()
{
    return $this->budget_year.' - '.$this->azinstitution->name;
    // You should add a check to ensure 
    // that $this->azinstitution actually exists
}

//controller
$annualOperatingBudgets = $this->BudgetRevenues->AnnualOperatingBudgets
    ->find('list', ['keyField' => 'id', 'valueField' => 'full_year'])
    ->contain(['Azinstitutions]);

虚拟财产运作良好。非常感谢Arilia,虚拟财产工作得非常出色。非常感谢arilia