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