CakePHP:在视图上加载相关模型的名称字段

时间:2016-02-23 14:36:06

标签: php oop cakephp associations

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

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 个答案:

答案 0 :(得分:0)

有两种方法:

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

     $this->Solicitation->recursive = 2;
    

    使用此功能的缺点是当您涉及很多关联时,它会检索大量不需要的不必要数据。

    1. 您可以使用" Containable"行为在这里。

       $this->Solicitation->Behaviors->load("Containable");
      
    2. 并指定要检索的模型名称:

           $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'
          ));
      

      如果您进行调试,您肯定会找到" City"每个Destiny子数组中的索引。

      希望这有帮助。

      和平!的xD