Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1187336
  • 博文数量: 89
  • 博客积分: 10546
  • 博客等级: 上将
  • 技术积分: 1510
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-16 01:24
文章分类

全部博文(89)

文章存档

2012年(7)

2011年(4)

2010年(5)

2009年(52)

2008年(21)

分类:

2008-10-23 09:39:52

一个最本的Blog程序除了能够发布文章,还应该让其它用户添加评论,前面的几步都是针对post作为例子,只有一个表,这里加入一些其它表,让一个blog具备基本一些最基本的元素。
删除之前的posts,重新创建Blog的模型,创建数据库的scripts如下。

CREATE TABLE `comments` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(64) NOT NULL,
  `content` text NOT NULL,
  `post_id` int(11) NOT NULL,
  `commenter` varchar(64) NOT NULL,
  `url` varchar(256) default NULL,
  PRIMARY KEY  (`id`)
)  ;

CREATE TABLE `posts` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(64) NOT NULL,
  `content` text NOT NULL,
  `created` date default NULL,
  `modified` date default NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)  ;

DROP TABLE IF EXISTS `posts_tags`;
CREATE TABLE `posts_tags` (
  `id` int(11) NOT NULL auto_increment,
  `post_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)  ;

DROP TABLE IF EXISTS `profiles`;
CREATE TABLE `profiles` (
  `id` int(11) NOT NULL auto_increment,
  `firstname` varchar(64) NOT NULL,
  `lastname` varchar(64) NOT NULL,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ;

DROP TABLE IF EXISTS `tags`;
CREATE TABLE `tags` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(64) default NULL,
  PRIMARY KEY  (`id`)
)  ;

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(64) NOT NULL,
  `password` varchar(64) NOT NULL,
  `name` varchar(64) NOT NULL,
  `email` varchar(64) NOT NULL,
  PRIMARY KEY  (`id`)
) ;


在app/models下创建相应的Model文件。
模型Post的文件app/models/post.php内容如下。

class Post extends AppModel {
    var $name = 'Post';
}
?>


模型Comment 的文件app/models/comment.php的内容如下。


class Comment extends AppModel {
    var $name = 'Comment';
}
?>


模型User的文件app/models/user.php的内容如下。


class User extends AppModel {
    var $name = 'User';
}
?>


模型Tag 的文件是app/models/tag.php,其内容如下。


class Tag extends AppModel {
    var $name = 'Tag';
}
?>


posts_tags 作为一个关联表不生成模型文件。

其实你也可以利用bake工具来完成这些基础的代码。

打开Terminal,进入app目录,运行../cake/console/cake bake。

[hantsy@localhost app]$ ../cake/console/cake bake


Welcome to CakePHP v1.2.0.7692 RC3 Console
---------------------------------------------------------------
App : app
Path: /home/hantsy/public_html/cakeblog/app
---------------------------------------------------------------
Interactive Bake Shell
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[Q]uit
What would you like to Bake? (D/M/V/C/P/Q)


选择M,根据向导一步步的创建模型文件。
你也可以输入 ../cake/console/cake bake model 来减少一些步骤。

[hantsy@localhost app]$ ../cake/console/cake bake model


Welcome to CakePHP v1.2.0.7692 RC3 Console
---------------------------------------------------------------
App : app
Path: /home/hantsy/public_html/cakeblog/app
---------------------------------------------------------------
---------------------------------------------------------------
Bake Model
Path: /home/hantsy/public_html/cakeblog/app/models/
---------------------------------------------------------------
Use Database Config: (default/test)
[default] >
Possible Models based on your current database:
1. Comment
2. Post
3. PostsTag
4. Profile
5. Tag
6. User
Enter a number from the list above, type in the name of another model, or 'q' to exit 
[q] >



或 ../cake/console/cake bake model <模型名称> 如Post ,它不提供交互方式,直接生成文件,内容最简洁。


[hantsy@localhost app]$ ../cake/console/cake bake model Post


Welcome to CakePHP v1.2.0.7692 RC3 Console
---------------------------------------------------------------
App : app
Path: /home/hantsy/public_html/cakeblog/app
---------------------------------------------------------------

Baking model class for Post...

Creating file /home/hantsy/public_html/cakeblog/app/models/post.php




前面已介绍过模型命名方面的一些约定,这里不再重复。
对于表,除前面的提到的表名约定以外,字段也有一些约定。
必须有一个名为id的主键。
如果有一个名name 或title 的属性,会自动作为$scaffold页面的标题,fieldset标题,或label,当生成下拉列表时,自动作为列表名称显示出来。
如果表包含datetime类型的created 和modified 属性,在新建记录时会在created 和modified 两个字段插入当前日期,更新时会更新modified字段。
阅读(2423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~