0

我正在为巴西的一所大学开发一个系统。在这个系统中,我有以下模型: - 国家;- 状态; - 城市; - 大学; - 单元; - 班级;

好的。关系是: - 国家属于国家;- 城市属于国家;- 大学属于国家(因为在我的数据库中,不是每个国家都有注册的州,也不是每个州都有注册的城市,所以我不能要求用户将大学注册到城市);- 单位属于大学;- 班级属于大学(因为并非每所大学都有注册的单位);

好的。我想现在我已经为你们了解我的情况奠定了良好的背景。现在到问题本身:

在我的模型类的视图中,我想显示国家和(如果有州城市)。而且我可能需要在其他模型视图中显示这些内容,例如单元和大学。

但是当我尝试在我的 Class 模型中这样做时,我只能显示 country_id。我的大学数据库表中的外键。为什么会这样,那是因为我的 Class 模型属于 University,所以很容易访问我的 University 的属性。但是我不想访问国家的 id,我想要它的名字。也许将来我可能想要其他属性,谁知道呢?

我怎么做?当我的模型类与其没有直接关系时,如何访问模型国家的属性?

许多thx拥抱和亲吻。希望有人可以帮助我解决这个问题。

pS:我管理了一个失败的解决方案:在我的类控制器中,我完成了以下操作(所以我可以访问模型国家、州和城市的变量):

  • 在 View 函数中,我加载了州和城市的模型(我可以通过关系 Class->University->Country 访问的国家模型);
  • 然后我使用 find 方法为我想在 view.ctp 中显示的相关类查找相应的国家、州和城市。代码如下:

    public function view($id = null) {    
        $this->Class->id = $id;
        $this->set('class', $this->Class->read());  
        $this->loadModel('State');  
        $this->loadModel('City');  
        $country = $this->Class->Universsity->Country->find('first', array('conditions' => array('Country.id' => $this->Class->data['University']['country_id']),));  
        $state = $this->State->find('first', array('conditions' => array('State.id' => $this->Class->data['University']['state_id']),));  
        $city = $this->City->find('first', array('conditions' => array('City.id' => $this->Class->data['University']['city_id']),));  
        $this->set('country',$country['Country']);$this->set('city',$city);  
        $this->set('state',$state);  
    }
    

它有点工作......在我的 Wiew.ctp 中,我得到一个国家数据数组,一个国家数据数组和一个城市数据数组。在视图中,我检查 state 和 city 数组是否不是 length = 0 来显示它们和所有......但我认为必须有更好的方法来做到这一点。

PP:

另一个问题是……Index.ctp 呢?如果我不知道我正在与哪个班级一起工作,我将如何做到这一点?我必须有逻辑并在视图中查找方法吗?不就是乱码吗?

4

1 回答 1

1

如果不发布您的代码,就很难为您指明正确的方向。但是,假设您的模型配置正确,您应该能够执行以下操作:

类控制器.php

public class ClassController extends AppController{

    public $uses = array('Class');

    public function view($id){
        $class = $this->Class->find('first', array('conditions' => array('Class.id' => $id));
        $this->set('class', $class);
    }
}

视图.ctp

<?php echo $class['Country']['name']?>

然而,您可能会发现必须配置recursive类模型的参数,以便 CakePHP 检索所有相关数据。这可以通过以下两种方式之一完成:

  1. 在模型中配置recursive参数Class(请参阅有关如何执行此操作的文档)。recursive每当您从数据库中检索记录并且您没有在选项中指定属性时,这都会设置默认值。
  2. 在方法调用中设置recurisve参数。find(...)我喜欢这个,因为当您不需要它检索的数据时,它有助于避免给数据库带来沉重的负担。

例如,在您的控制器中,您可以执行以下操作:

public function view($id){
    $class = $this->Class->find('first', array('conditions' => array('Class.id' => $id), 'recursive' => 3));
    $this->set('class', $class);
}

只是一个警告,不要设置recursive为高于你需要的值,否则你可能会检索到你不需要的东西。使用该debug()功能检查您的模型当前正在检索什么,以便您做出更明智的决定:

debug($class);

我希望这会有所帮助!

于 2013-06-07T16:28:02.920 回答