添加hasMany关联会导致find()无法正常工作

时间:2009-12-29 05:42:38

标签: php cakephp associations

好的,我有点失落......

我是PHP的新手,我正在尝试将CakePHP用于我的网站 我的DB由两个表组成:

  • 具有user_id,名称列
  • 的用户
  • 使用copy_id,copy_name,user_id(作为用户的外键)列进行复制。

我有匹配的CakePHP元素:

  • 用户和复制为模型
  • UserController as controller
  • 我不使用视图,因为我只是从控制器发送json。

我在用户模型和复制模型之间添加了hasMany关系,见下文。

var $hasMany = array(
    'Copy' => array(
        'className' => 'Friendship',
        'foreignKey' => 'user_id'
    )
); 

如果没有关联,则users表上的每个find()查询都运行良好,但在将hasMany添加到模型后,对用户的相同find()查询停止工作(print_r不显示任何内容),并且每个查找()查询我正在申请复制模型

$copy = $this->User->Copy->find('all', array(
    'condition' => array('Copy.user_id' => '2')
));

忽略条件部分,只返回整个数据库。

如何调试代码执行?当我添加debug($var)时,没有任何反应。

4 个答案:

答案 0 :(得分:1)

我不是专家,但您可以从以下提示开始:

  1. 尝试按照CakePHP数据库命名conventions。你不必这样做,但是让自动化发生变得容易得多......将表格中的主键更改为“id”,例如users.user_is - > users.id,copies.copy_id - > copies.id。
  2. 定义视图,仅用于调试。通过$this->set('users', $users);将模型中的任何信息传递给视图,并在<pre></pre>
  3. 中显示
  4. 如果这是您的第一次php和/或CakePHP尝试,请确保至少执行博客教程
  5. 让CakePHP为用户和副本生成(烘焙)一组工作模型/视图/控制器并检查生成的代码
  6. 有很好的关于find的文档:the multifunctional workhorseof all model data-retrieval functions

答案 1 :(得分:1)

我认为主要问题是:

'condition' => array('Copy.user_id' => '2')

应该是“条件”。

另外,坚持命名约定。谢天谢地,Cake允许你覆盖几乎所有的假设名称,但是默认情况下更容易做到他们期望的事情。

  • 主键应全部命名为id
  • 控制器应该是复数:UsersController

答案 2 :(得分:1)

首先,尝试尽可能遵循CakePHP惯例。

var $hasMany = array(
    'Copy' => array(
        'className' => 'Friendship',
        'foreignKey' => 'user_id'
    )
);

您的关联名称是'复制',这是一个不同的表和模型,然后在您的类名上,您有'友谊'。

为什么不

var $hasMany = array(
     'Copy' => array('className'=>'Copy')
);

var $hasMany = array(
     'Friendship' => array('className'=>'Friendship') 
);

var $hasMany = array(
    'Copy' => array('className'=>'Copy'),
    'Friendship' => array('className'=>'Friendship')
);

另外,请检查拼写错误,例如conditions而不是condition

答案 3 :(得分:0)

您的表名也可能是问题所在。我有一个名为“Class”的桌子,它给了蛋糕。我把它改成像Myclass这样的东西,并且它有效。 Class是一个保留字,Copy也可能是一个。