cakephp 开源的php框架,支持 MVC、Rrest风格
app/Config/core.php设置
Configure::write('debug', 2);
Configure::write('App.encoding', 'UTF-8');
app/config/database.php 配置数据库
public $default = array (
'datasource' => 'Database/Mysql',
'persistent' => false, // 是否使用持久化
'host' => 'localhost',
'login' => 'root',
'password' => '111111',
'database' => 'test',
'prefix' => 't_',//可要可不要
// 'encoding' => 'utf8'
);
app/Config/routes.php 或者lib/Cake/Config/routes.php修改请求路由
Router::connect('/:name/:ver/:controller/:action/page::page/*',array(),array('name'=>'[0-9a-z]+','ver'=>'[0-9a-z]+','id'=>'[0-9]+','page'=>'[0-9]+'));
例子:/snoopy/v1/products(控制器)/display(请求的方法)/page:2(分页页码)
控制器中的分页查询
//定义为全局变量
var $paginate = array (
'Product' => array (
'limit' => 18,
'order' => array (
'Product.id' => 'desc'
)
),
'Category' => array ()
);
//写入到要请求的方法中
$data = $this->paginate ( "Product" );
如果需要用到级联查询,可要用
hasMany 一对多
hasOne 一对一 主表主键对应字表外键
belongsTo 多对一 主表外键对应字表主键
hasAndBelongsToMany 多对多
需要在app/model下定义模型,
定义Catagory和Product两个模型
在Product中写
var $belongsTo = array (
'Catagory' => array (
'className' => 'Category',
'foreignKey' => 'cat_id',
'fields' => array (
'id',
'cat_name'
)
)
)
;
hasOne关联支持的键包括:
- className: 需要关联的模型类名。如果定义的是'User hasOne Profile’关联,则className键值应为'Profile’。
- foreignKey: 需要关联模型的外键名称。该键对于需要定义多个hasOne关联时特别有用。它的默认值是当前模型的下划线、单数表示名称,然后加上'_id’后缀。本例中默认的话就应该为'user_id'。
- conditions: 一段SQL语句用来过滤关联模型的记录。在SQL语句中加上模型名称是一个好习惯,例如“Profile.approved = 1”就比“approved = 1”要好。
- fields: 取回关联模型数据的字段列表。默认返回全部。
- dependent: 当dependent键设置为true时,模型的delete()方法会将cascade参数设置为true,关联模型记录也会被删除。本例中我们设置为true,因此当删除User记录时,关联的Profile记录也会被删除。
belongsTo关联数组的键选项有:
- className: 需要关联模型的类名。如果定义了'Profile belongsTo User’关联,className键值应为'User’。
- foreignKey: 当前模型的外键名称。此键对于定义多个belongsTo关联时尤其有用。该键的默认值为需要关联模型的下划线、单数表示名称,加上'_id’后缀。
- conditions: 一段SQL代码用来过滤模型记录。在SQL代码中加上模型名称是个好习惯:如“User.active = 1”就比“active = 1”要好。
- fields: 取得关联数据的字段列表。默认返回所有字段。
- counterCache: 如果设置为true,当执行save()或delete()操作时,关联模型会自动增加或减少外部表中“[singular_model_name]_count”字段的值。如果值为字符串,则表示该字段的名称。记数字段的值代表关联记录的数量。
- counterScope: 用于更新记数器缓存字段的条件数组(可选)。
hasMany关联数组的键选项有:
- className: 需要关联模型的类名。如果定义了'User hasMany Comment’关联,className键值应为'Comment’。
- foreignKey: 需要关联模型的外键名称。此键对于定义多个hasMany关联时尤其有用。该键的默认值为当前模型的下划线、单数表示名称,加上'_id’后缀。
- conditions: 一段SQL代码用来过滤模型记录。在SQL代码中加上模型名称是个好习惯:如“Comment.status = 1”就比“status = 1”要好。
- fields: 取得关联数据的字段列表。默认返回所有字段。
- order: SQL代码段,定义返回的关联数据的排序。
- limit: 返回的关联数据的最大行数。
- offset: 在读取和关联之前需要跳过的关联记录的行数(以当前的条件和排序为准)。
-
dependent: 当dependent设置为true时,递归删除生效。举例,当用户记录被删除时,关联的Comment记录也会随之而删除。
要使递归删除生效,Model->delete()方法的第二个参数必须设置为ture。
- exclusive: 当exclusive设置为true时,递归删除会使用deleteAll()调用进行删除,而不逐个的进行删除。此方法会大幅提升性能,但不一定对所有环境都有效。
- finderQuery: 一条完整的SQL语句,CakePHP可以用来读取关联模型记录。该情况适用于那些需要特定查询结果的情形。
Possible keys for HABTM association arrays include:
- className: the classname of the model being associated to the current model. If you're defining a 'Recipe HABTM Tag' relationship, the className key should equal 'Tag.'
- joinTable: The name of the join table used in this association (if the current table doesn't adhere to the naming convention for HABTM join tables).
- with: Defines the name of the model for the join table. By default CakePHP will auto-create a model for you. Using the example above it would be called RecipesTag. By using this key you can override this default name. The join table model can be used just like any "regular" model to access the join table directly.
- foreignKey: the name of the foreign key found in the current model. This is especially handy if you need to define multiple HABTM relationships. The default value for this key is the underscored, singular name of the current model, suffixed with '_id'.
- associationForeignKey: the name of the foreign key found in the other model. This is especially handy if you need to define multiple HABTM relationships. The default value for this key is the underscored, singular name of the other model, suffixed with '_id'.
- unique: If true (default value) cake will first delete existing relationship records in the foreign keys table before inserting new ones, when updating a record. So existing associations need to be passed again when updating.
- conditions: An SQL fragment used to filter related model records. It's good practice to use model names in SQL fragments: "Comment.status = 1" is always better than just "status = 1."
- fields: A list of fields to be retrieved when the associated model data is fetched. Returns all fields by default.
- order: An SQL fragment that defines the sorting order for the returned associated rows.
- limit: The maximum number of associated rows you want returned.
- offset: The number of associated rows to skip over (given the current conditions and order) before fetching and associating.
- finderQuery, deleteQuery, insertQuery: A complete SQL query CakePHP can use to fetch, delete, or create new associated model records. This should be used in situations that require very custom results.
不太好理解的hasAndBelongsToMany关联(多对多关联)
我们的数据表结构如下
我们需要建立三个模型类
User模型,对应于users表,文件/app/models/user.php
Friend模型,也对应users表(Friend和User共享数据),用来和users模型进行多对多关联
文件/app/models/friend.php
FriendsUser模型,对应关联表friends_users,文件/app/models/friends_user.php
好了,定义好模型,我们要查询User的所有Friend,在控制器中,要这样
查询的结果,可能类似下面的数据
可以看到,这正是我们需要的数据。
参考文档:
http://book.cakephp.org/1.3/cn/view/1044/hasAndBelongsToMany-HABTM
http://my.oschina.net/adamboy/blog/17596