2012-05-17 32 views
1

我有一个问题,我一直试图解决几个小时。假设我有书模型,作者模型和国家模型。如何获取相关的对象名称?

查看书籍条目时,页面底部有相关的对象。在这种情况下,作者。

该页面显示了作者的相关数据,作者的姓名和其他详细信息显示正常。然而,该国显示为country_id。

有没有一种方法可以将其更改为国名?

UPDATE:

我有这三个表: 书HMBM作者^ h国家

一本书可以由许多作者编写(对于文集)

是,作者写的很多书

作者可能会居住在国家

一个国家可能主办可能的作者。

书:

public $hasAndBelongsToMany = array(
    'Author' => array(
     'className' => 'Author', 
     'joinTable' => 'author_books', 
     'foreignKey' => 'book_id', 
     'associationForeignKey' => 'author_id', 
     'unique' => '', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

作者:

public $hasMany = array(
    'Book' => array(
     'className' => 'Book', 
     'foreignKey' => 'book_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
public $belongsTo = array(
    'Country' => array(
     'className' => 'Country', 
     'foreignKey' => 'country_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 

国家:

public $hasMany = array(
    'Author' => array(
     'className' => 'Author', 
     'foreignKey' => 'country_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
+0

这里没有实际的代码(你做什么来检索数据)没有人真的能够正确地帮助你。 – mark

+0

您还需要发布您设置的模型关系(在模型中) – mark

+0

我将在稍后发布。我之所以没有发布任何比我更多的信息,是因为我的所有问题都有更多的信息没有收到回复。-_-感谢您的关注。我会尽快添加它。 –

回答

0

如果一本书有一个作者,一个作者有一个国家,你所需要的数据ORM的机制之外,以避免递归调用数据库。在您的控制器方法中调用$this->Book->recursive = 2以增加递归限制。

+1

-2应该是2 - 但我仍然高度反对这个建议,以支持使用可容忍的更好的方法。 – mark

+0

设置递归似乎不能做任何事情,不幸的是,艾略特。 别担心,你可以提交一个答案也标记:) –

+0

你是对的,它应该是2 - 修正!递归会起作用,但会减慢响应速度。忘记包含,这是一个更好的方法。 – elliot