Как определить связь между двумя моделями в cakephp 2.8.0

#cakephp

#cakephp

Вопрос:

У меня есть две модели user и project, и user_id хранится в таблице проекта как реализовать внутреннее соединение для отображения имени пользователя для таблиц users и таблицы projects во всех полях. это моя модель для определения ассоциации // модель проекта

 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')))));
  

Комментарии:

1. Я также ищу что-то, где я мог бы получить города, связанные с определенным штатом или округом, после того, как сделал любой выбор из выпадающего списка штата / округа. Это своего рода ассоциация или какое-то объединение, которое я должен использовать? Есть предложения??

Ответ №1:

Лучше всего использовать способ cakephp. Добавьте следующий код в свой контроллер проекта. $conetent= $this->Project-> find(‘all’,array(‘limit’ => 3,’contain’ => array(‘User’)));

Ответ №2:

То, что вы ищете, — это отношение belongsTo. Таким образом, когда вы выполняете поиск в контроллере проектов, он извлекает соответствующую запись из таблицы пользователей, к которой принадлежит проект. Например (с использованием 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');
}
  

Поиск в контроллере проектов должен привести к чему-то вроде этого:

 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'
        )
    )
)