CakePHP:加载相关模型的名称字段


CakePHP: Load name field of related model on view

伙计们,我有一个简单但无聊的问题......我有以下情况:

Solicitation -> HasMany -> Destiny
Destiny -> BelongsTo -> City

我的问题是在视图上,我想检索城市名称而不是city_id,但我无法弄清楚。

这是我的结果:

array (size=12)
  'Solicitation' => 
    array (size=32)
      'id' => string '25' (length=2)
  'Destiny' => 
    array (size=2)
      0 => 
        array (size=3)
          'id' => string '3' (length=1)
          'solicitation_id' => string '25' (length=2)
          'city_id' => string '4382' (length=4)
      1 => 
        array (size=3)
          'id' => string '4' (length=1)
          'solicitation_id' => string '25' (length=2)
          'city_id' => string '4350' (length=4)

如何在视图上检索城市名称?

这是我的控制器:

public function mySolicitations()
    {
        $this->Solicitation->recursive = 1;
        $person_id = $this->Auth->user('id');
        $conditions = array(
            'Solicitation.created_by' => $person_id
        );
        $this->set(array(
            'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
            'title_for_layout' => 'My Solicitations'
        ));
    }

我的关系有问题吗?提前谢谢。

有两种方法:

  1. 将模型递归值更改为 2。

     $this->Solicitation->recursive = 2;
    

    使用它的缺点是,当您涉及相当多的关联时,它将检索大量不需要的不必要的数据。


  1. 您可以在此处使用"可包含"行为。

     $this->Solicitation->Behaviors->load("Containable");
    

并指定要检索的模型名称:

     $this->Solicitation->contain(array(
        "Destiny", "Destiny.City"
       )
     );

然后添加您的代码:

    $conditions = array(
        'Solicitation.created_by' => $person_id
    );
    $this->set(array(
        'data' => $this->paginate('Solicitation', $conditions, array('Solicitation.id' => 'DESC')),
        'title_for_layout' => 'My Solicitations'
    ));

如果你调试,你肯定会在每个命运子数组中找到"城市"索引。

希望这有帮助。

和平! xD