【问题标题】:CakePHP Relationships over more then one Model/TableCakePHP 关系超过一个模型/表
【发布时间】:2012-06-14 13:20:06
【问题描述】:

我刚开始学习 CakePHP。我完成了博客教程,现在正在尝试为帖子添加类别。我创建了类别和子类别模型以及 MySQL 数据库表,并将模型关联如下:

帖子 -> “belongsTo” -> 子类别 -> “belongsTo” -> 类别

帖子 -> 子类别工作正常,我可以通过以下方式解析视图中的子类别名称:

php echo $post['SubCategory']['name'];

现在:我如何在关系中更进一步并在帖子视图中获取帖子的类别名称(通过子类别)?以下显然给了我类别 ID,但不是它的名称:

php echo $post['SubCategory']['category_id'];

非常感谢!

【问题讨论】:

    标签: cakephp relationship


    【解决方案1】:

    查看recursive parameter 的模型并进行第 2 步(2 个深度级别)。如果您的定义正确,这将允许您使用该类别。请记住,它需要获取大量数据,这会影响网站的整体性能。

    【讨论】:

      【解决方案2】:

      您应该查看ContainableBehavior,这将帮助您只获取您真正需要的结果。我总是建议的第一件事是更改 $recursive = -1 并使用 Containable。这也将大大提高您的应用程序的性能,因为您将减少对您实际不使用的数据的调用。

      使用您的示例:

      $results = $this->Post->find('all', array(
        'contain' => array(
          'SubCategory' => array(
            'Category'
          )
        )
      ));
      
      // in your view foreach loop
      echo $post['SubCategory']['Category']['name'];
      

      【讨论】:

      • 在我将您的代码添加到控制器(并更改视图的回显线)之后,我得到了这个:通知(8):未定义索引:类别 [APP/View/Posts/index.ctp , 第 40 行]
      • 您是否调试了$results 以确保它加入了数据?
      • 似乎(如果我没看错的话)它没有加入数据。视图中该行的调试输出为“null”,对于 $results,我没有看到任何类别数据……这是我添加到 PostsController 中的: public function index() { $this->set('posts' , $this->Post->find('all')); $this->Post->recursive = -1; $results = $this->Post->find('all', array('contain' => array('SubCategory' => array('Category')))); } 视图中的行是您建议的行吗?
      • 您是否将可包含行为添加到您的$actsAs 数组中?
      • 对不起,我迷路了。 $actsAs 适用于模型,对吗?我只对控制器和视图进行了更改。 Post 模型看起来像这样 class Post extends AppModel { public $name = 'Post'; public $belongsTo = 'SubCategory'; 我尝试添加:public $actsAs = array('Containable'); 但没有任何运气。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多