代码之家  ›  专栏  ›  技术社区  ›  Jason McCreary

Cakephp的长口腔

  •  1
  • Jason McCreary  · 技术社区  · 15 年前

    我有三个具有相关属性的模型:

    链接模型:

    var $belongsTo = array('LinkCategory');
    

    链接类别模型:

    var $hasMany = array('Link');
    var $hasAndBelongsToMany = array('User');
    

    用户模型

    var $hasAndBelongsToMany = array('LinkCategory');
    

    有了它,我希望下面的内容可以为我提供用户的所有链接类别。

    $user_link_categories = $this->LinkCategory->find('all', array('conditions' => array('User.id' => 1)));
    

    但是,死亡原因如下: “Where子句”中的未知列“user.id” 查询:选择 LinkCategory . id , 链接类别 . title , 链接类别 . created , 链接类别 . modified link_categories AS 链接类别 哪里 User . 身份证件 = 1

    我刚接触Cakephp,但不是MVC。在我看来,考虑到我的联想,这应该是可行的。我是否遗漏了一些东西,或者因为某种原因在cakephp中不起作用。

    2 回复  |  直到 15 年前
        1
  •  0
  •   bancer    15 年前

    我有三个具有相关属性的模型:

    链接模型 :

    应该有 链接 模型,而不是 链接 . 我希望那是个印刷错误。

    链接类别模型 :

    var$hasandbelongomany=array(“用户”);

    我想这意味着您有join table link_categories_用户,因此需要将递归值更改为2:

    $user_link_categories = $this->LinkCategory->find('all', array('recursive' => 2, 'conditions' => array('User.id' => 1)));
    

    或:

    $user_link_categories = $this->LinkCategory->find('all', array('recursive' => 2, 'conditions' => array('LinkCategoryUser.user_id' => 1)));
    

    或:

    $user = $this->User->find('first', array('recursive' => 2, 'conditions' => array('User.id' => 1)));
    

    更新 . 这个 必须 工作:

    $user_link_categories = $this->LinkCategory->User->find('all', array('conditions' => array('User.id' => 1)));
    
        2
  •  0
  •   Richard JP Le Guen    15 年前

    LinkCategory 没有字段 User.id …事实上, 用户ID 中间有个句号表示 id 是属于的字段 User .

    自从 链接类别 belongsTo 用户 它可能有一块地 user_id 从理论上讲,这是可行的:

    $user_link_categories = $this->LinkCategory->find('all', array('conditions' => array('user_id' => 1)));
    

    如果这仍然不起作用,这意味着您的DB表没有列来支持这些关系,您需要 read more about associations 把事情搞清楚。

    但就个人而言,我认为你是在倒退。你想找一个 链接类别 基于它们的关联 用户 ,但不能使用其他模型中的字段( 用户 )像这样在一个简单的 find() (上) 链接类别 )

    相反,您应该找到具有 身份证件 “1”,那么-自从 用户 归属 链接类别 读那个 用户 链接类别 . 我又生锈了,但我想它看起来有点像这样…

    $user = $this->User->find('first', array('conditions' => array('Article.id' => 1)));
    pr($user);
    

    …做那个 recursive (见 here ) $user 应该加载您的 链接类别 也。