【问题标题】:Need help with hasAndBelongsToMany (HABTM) Cakephp find在 hasAndBelongsToMany (HABTM) Cakephp 方面需要帮助
【发布时间】:2010-09-16 18:38:23
【问题描述】:

我正在尝试在 Cakephp 1.3 中查询 hasAndBelongsToMany 关系,但看起来正在运行的 SQL 查询并未对多对多表进行联接。

我有一个 users 表、projects 表和 users_projects 表。我想在单独的分配控制器中获取用户关联的所有项目的列表。

我一直在阅读有关该主题的 cakephp 书:http://book.cakephp.org/view/1044/hasAndBelongsToMany-HABTM

所以我一直在尝试这个:

var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));

但是这不起作用,它什么也不返回,而且这个错误:

Warning (512): SQL Error: 1054: Unknown column 'Projects.user_id' in 'where clause' [CORE/cake/libs/model/datasources/dbo_source.php, line 681]

Query: SELECT `Project`.`id`, `Project`.`name` FROM `projects` AS `Project` WHERE `Projects`.`user_id` = '21' 

看起来 cakephp 没有进行所需的连接。

这是在我的项目模型中:

var $hasAndBelongsToMany = array(
    'User' => array(
        'className' => 'User',
        'joinTable' => 'users_projects',
        'foreignKey' => 'project_id',
        'associationForeignKey' => 'user_id',
        'unique' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )

这是在我的用户模型中:

var $hasAndBelongsToMany = array(
    'Project' => array(
        'className' => 'Project',
        'joinTable' => 'users_projects',
        'foreignKey' => 'user_id',
        'associationForeignKey' => 'project_id',
        'unique' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )

那么,在 cakephp 中以多对多关系获取给定用户的项目列表的正确语法是什么?

【问题讨论】:

    标签: cakephp has-and-belongs-to-many


    【解决方案1】:

    可能是因为你没有让两个表名按字母顺序连接。users_projects 应该是projects_users

    【讨论】:

    • @mrlanrat,但是您希望查询结果是什么样的?
    • 我只想要与给定用户关联的项目和项目的 ID。
    • @mrlanrat,你已经这样做了,因为你已经指定了Project.user_id
    • 我损失了 4 个小时,只是我的 hasandbelongstomany 表的名称被颠倒了....上帝保佑
    【解决方案2】:

    您收到此错误是因为您使用的是查找类型“list”。 Cake 的默认行为是在使用这种查找类型时选择 ID 和 NAME 字段。

    将您的查找类型更改为“全部”以检索您期望的结果:

    var_dump($this->Allocation->User->Project->find('list',array('conditions'=>array('Project.user_id'=>'21'))));

    【讨论】:

    • 当更改为 all 时,我仍然得到同样的错误。这是 SQL 输出: 查询:SELECT Project.id, Project.name, Project.description, description, Project.created, Project.@98765@32 F@ROM 987654333@ AS Project WHERE Projects.user_id = '21'
    • 我还希望返回的数据是列表格式,以便在 html 表单中使用。
    • 在 User 和 Project 模型中重命名连接表后,您是否也更改了 'joinTable' => 'users_projects'?
    猜你喜欢
    • 2011-01-27
    • 2014-02-06
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多