Три простых стола ...
- Feedname (например, новости или
События), которые являются названиями RSS
каналы.
- Сообщения, которые принадлежат
Feedname
- Пользователь, которому принадлежат все
сообщений
Я хочу использовать помощник по формам, чтобы автоматически дать мне поле выбора, чтобы при добавлении сообщения я мог выбирать, какому имени канала его назначать.
Похоже, что сообщения принадлежат как Feedname, так и User, но я не могу получить правильную комбинацию serveTo и hasMany в моих файлах модели / .php. Отображается поле выбора для имени канала, но в нем ничего нет. Кто-нибудь может указать мне правильное направление?
На данный момент таблицы выглядят так:
CREATE TABLE `feednames` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`body` text COLLATE utf8_unicode_ci,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
`user_id` int(10) unsigned NOT NULL DEFAULT '1',
`feedname_id` int(10) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `foreign_key` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET latin1 NOT NULL,
`password` char(40) CHARACTER SET latin1 NOT NULL,
`group_id` int(11) NOT NULL,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
edit - добавление файлов модели .php ...
class Feedname extends AppModel {
var $name = 'Feedname';
var $hasMany = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'feedname_id',
'dependent' => false
)
);
}
class Post extends AppModel {
var $name = 'Post';
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
),
'Feedname' => array(
'foreignKey' => 'feedname_id'
)
);
}
class User extends AppModel {
var $name = 'User';
var $hasMany = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'user_id',
'dependent' => false
)
);
}
edit - добавление дампа SQL ** ...
/ сообщений / index.ctp:
ВЫБРАТЬ СЧЕТ (*) КАК count
ОТ posts
КАК Post
ВЛЕВО СОЕДИНЯЕТСЯ users
КАК User
ВКЛ (Post
. user_id
= User
. id
) ВЛЕВО СОЕДИНИТЬСЯ feednames
AS Feedname
ON (Post
. feedname_id
= Feedname
. id
) WHERE 1 = 1
SELECT Post
. id
, Post
. title
, Post
. body
, Post
. created
, Post
. modified
, Post
. user_id
, Post
. feedname_id
, User
. id
, User
. username
, User
. password
, User
. group_id
, User
. created
, User
. modified
, Feedname
. id
, Feedname
. name
, Feedname
. created
, Feedname
. modified
ОТ posts
КАК Post
ВЛЕВО СОЕДИНЯЕТСЯ users
AS User
ВКЛ (Post
. user_id
= User
. id
) СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ feednames
AS Feedname
ВКЛ (Post
. feedname_id
= Feedname
. id
) ГДЕ 1 = 1 ЗАКАЗАТЬ ПО Post
. created
DESC LIMIT 10
Обратите внимание: /posts/add.ctp не создает дамп SQL, поэтому он не получает параметры поля выбора из базы данных, это то, что я пытаюсь исправить с помощью правильных отношений модели .