如何在cakephp 2.8.0中定义两个模型之间的关联

时间:2016-10-05 13:34:04

标签: cakephp

我有两个模型用户和项目,而user_id存储在项目表中如何实现内连接以显示用户表和项目表所有字段的用户名。      这是我定义关联的模型     //项目模型

class Project extends AppModel 
{
public $actsAs = array('Containable');
public $hasOne= array('User');
}
//Query Is
   $conetent= $this->Project->find('all',array('limit' => 3,'joins' => array(array('table' => 'users','alias' => 'User1','type' => 'INNER','conditions' => array('Project.user_id =User1.id')))));

2 个答案:

答案 0 :(得分:1)

最好用cakephp方式做。 将以下代码添加到项目控制器。   $ conetent = $ this->项目 - >查找('全部',数组('限制' => 3,'包含' =>数组('用户')));

答案 1 :(得分:0)

您正在寻找的是belongsTo关系。这样,当您在Projects控制器中执行查找时,它将从项目所属的User表中提取相应的记录。例如(使用CakePHP 2.x)

数据库表

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `firstname` varchar(32) DEFAULT NULL,
  `lastname` varchar(32) DEFAULT NULL,
  `email` varchar(96) DEFAULT NULL,
  `password` varchar(64) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  `lastlogin` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `projects` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(32) DEFAULT NULL,
  `description` varchar(32) DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

用户控制器     

class UsersController extends AppController {
    public $uses = array('User');

    public function index() {

    }

    public function create() {

    }

    public function update() {

    }

    public function delete() {

    }
}

用户模型

<?php

class User extends AppModel {

}

项目控制器

<?php

class ProjectsController extends AppController {
    public $uses = array('Project');
    public $components = array('Paginator', 'RequestHandler');

    public function index() {
        $projects = $this->Project->find('all'));
    }
}

项目模型

<?php

class Project extends AppModel {
    public $useTable = 'projects';
    public $belongsTo = array('User');
}

项目控制器中的find应该产生如下结果:

array(
    (int) 0 => array(
        'Project' => array(
            'id' => '1',
            'firstname' => 'John',
            'lastname' => 'Smith',
            'email' => 'john.smith@domain.tld',
            'password' => '******',
            'created' => '2016-10-06 00:00:00',
            'modified' => '2016-10-06 00:00:00',
            'lastlogin' => '2016-10-06 00:00:00'
        ),
        'User' => array(
            'id' => '1',
            'user_id' => '1',
            'name' => 'Project Name',
            'description' => 'Project Description',
            'created' => '2016-10-06 00:00:00',
            'modified' => '2016-10-06 00:00:00'
        )
    )
)