2009-12-29 32 views
1

OK,我有点失去了...添加的hasMany关联引起找到()不正常工作

我非常新的PHP和我试图使用CakePHP我的网站。
我的DB是由两个表:

  • 用户USER_ID,名字列
  • 副本与copy_id,COPY_NAME,USER_ID(如外键的用户)列。

和我有匹配CakePHP的元素:

  • 用户和复制作为模型
  • UserController中的控制器
  • 我不使用视图,因为我刚刚从发送JSON控制器。

我在用户模型和复制模型之间添加了很多关系,参见下面。

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

没有关联的用户表中的每个查找()查询效果很好,但加入的hasMany到模型中,同样发现()查询的用户后停止工作(print_r的不显示任何东西) ,并且我在复制模型上应用的每个find()查询

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

忽略条件部分并仅返回整个数据库。

我该如何调试代码执行?当我添加debug($var)什么也没有发生。

回答

1

我不是专家,但你可以用下面的提示开始:

  1. 尝试按照CakePHP的数据库命名conventions。您不必这样做,但让automagic发生更容易...将tabel中的主键更改为'id',例如users.user_is - > users.id,copies.copy_id - > copies.id。
  2. 定义一个视图,只是为了调试。通过什么方式从模型查看与$this->set('users', $users);并显示在<pre></pre>
  3. 如果这是你的第一个PHP和/或CakePHP的尝试,确保你至少要做到博客教程
  4. 让CakePHP的产生(烤)一为用户和复制工作集模型/视图/控制器和检查生成的代码
  5. 有良好的文档有关的发现:the multifunctional workhorseof all model data-retrieval functions
0

你的表名可能是问题了。我有一个名为“班”的表,并给了蛋糕适合。我把它改成了像Myclass这样的东西,它工作。 Class是一个保留字,Copy也可能是一个。

1

我认为主要的问题是这样的:

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

它应该是 “条件”。

此外,坚持命名约定。值得庆幸的是,Cake可以让你覆盖几乎所有的假名,但是更容易做到他们默认的期望。

  • 的主键应该是所有命名id
  • 控制器应pluralised:UsersController
+0

烨检查错字的错误,这是此职位的原因呃'find'查询失败。可能会避免讨论的其余部分... – 2010-03-23 19:29:03

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