三個簡單的表...幫助CakePHP的模型關係
- Feedname(如新聞或 活動),這是RSS提要 的名字。屬於一個 Feedname
- 用戶
- 帖子,它擁有所有 職位
我想用表單輔助自動給我一個選擇框,這樣,當我加入後我可以選擇將其分配給哪個Feedname。
看起來帖子屬於Feedname和User,但我無法在我的model/.php文件中獲得belongsTo和hasMany的正確組合。顯示feedname的選擇框,但沒有任何內容。任何人都可以將我指向正確的方向嗎?
的表格看起來像這樣的時刻:
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;
編輯 - 添加模型.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
)
);
}
編輯 - 添加SQL轉儲** ...
/posts/index.ctp:
SELECT COUNT(*)AS count
FROM posts
AS Post
LEFT JOIN users
AS User
ON(Post
。 user_id
= User
。 id
)LEFT JOIN feednames
AS Feedname
ON(Post
。feedname_id
= Feedname
。id
)其中1 = 1
Post
SELECT。 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
FROM posts
AS Post
LEFT JOIN users
AS User
ON(Post
。user_id
= User
。id
)LEFT JOIN feednames
AS Feedname
ON(Post
。feedname_id
= Feedname
。id
)其中1 = 1 ORDER BY Post
。created
DESC LIMIT 10
請注意: /posts/add.ctp不產生任何SQL轉儲,所以它沒有得到從數據庫中選擇框的選項,這就是我想用適當的模型來解決關係。
您還可以添加模型文件嗎?你用過蛋糕烘烤嗎? – 2010-09-29 19:36:17
我沒有使用蛋糕烘烤 - 我基本上從Cake Book的Blog教程中複製了精確的代碼,並添加了Feednames控制器/模型/視圖。請參閱模型文件的編輯問題。 – Owen 2010-09-29 22:11:33