cakePHP-模型关系

cakePHP-模型关系,cakephp,models,database-relations,Cakephp,Models,Database Relations,我正在为巴西的一所大学开发一个系统。在这个系统中,我有以下模型: -国家; -国家; -城市; -大学; -单位; -阶级 嗯。这些关系是: -国家属于国家; -城市属于国家; -大学属于国家(因为,在我的数据库中,不是每个国家都有州向它注册,也不是每个州都有城市向它注册,所以我不能要求用户向城市注册大学); -大学所属单位; -班级属于大学(因为不是每所大学都有注册单位) 嗯。我想现在我已经为你们了解我的情况设置了一个良好的背景。现在谈谈问题本身: 在我的模型课视图中,我想显示国家和城市(如果

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

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

嗯。我想现在我已经为你们了解我的情况设置了一个良好的背景。现在谈谈问题本身:

在我的模型课视图中,我想显示国家和城市(如果有州立城市)。我可能需要在其他模型视图(如Unit和University)中显示此类内容

但是当我尝试在我的课堂模型中这样做时,我只能在我的大学数据库表中显示国家id。为什么会这样,因为我的类模型属于大学,所以很容易访问我的大学属性。然而,我不希望访问该国的id,我想要它的名称。也许将来我会想要别的房子,谁知道呢

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

许多thx拥抱和亲吻。希望有人能帮我做这个

p、 S: 我管理了一个类似于失败者的解决方案:在我的类控制器中,我做了以下工作(这样我就可以访问模型国家、州和城市的变量):

  • 在视图功能中,我加载了州和城市的模型(我可以通过关系类->大学->国家访问国家模型)
  • 然后,我使用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中,我得到了一个用于国家数据的数组,一个用于州数据的数组和一个用于城市数据的数组。在视图中,我检查州和城市数组是否不是length=0来显示它们和所有…但我认为必须有更好的方法来做到这一点

p.p.S.:


另一个问题是…Index.ctp呢?如果我不知道我在哪个班级工作,我该怎么做?我是否需要在视图中找到逻辑和方法?这不是把代码弄乱了吗?

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

public function view($id){
    $class = $this->Class->find('first', array('conditions' => array('Class.id' => $id), 'recursive' => 3));
    $this->set('class', $class);
}
ClassController.php view.ctp 只是一个警告,不要将
recursive
设置为高于您需要的值,否则您可能会检索到您并不特别需要的内容。使用
debug()
函数检查您的模型当前正在检索的内容,以便您可以做出更多明智的决定:

debug($class);
我希望这能有所帮助

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