rickysu / cacheable-behavior-bundle
为symfony 2提供propel1智能缓存行为包
v1.0.2
2013-04-08 03:09 UTC
Requires
- php: >=5.3.3
- rickysu/tagcache: >=1.0.0
- symfony/event-dispatcher: >=2.1.0
Suggests
- propel/propel1: 1.6.*
This package is auto-updated.
Last update: 2024-09-14 18:20:20 UTC
README
简介
这是一个为propel1和symfony2提供的智能关系缓存包。
特性
- 主键和唯一索引查询缓存。
- 一对一关系缓存。
- 一对多关系缓存。
- 多对多关系缓存。
- 自动检测单键或复合键。
要求
- PHP 5.3.3以上
- rickysu/tagcache 0.1以上
安装
编辑根项目中的composer.json文件。
在require: {}部分编辑composer.json
"rickysu/cacheable-behavior-bundle": "0.1.*",
使用Composer安装Bundle
php composer.phar install
如何使用
设置配置
app/config.yml
propel: path: "%kernel.root_dir%/../vendor/propel" phing_path: "%kernel.root_dir%/../vendor/phing" logging: %kernel.debug% dbal: driver: %database_driver% user: %database_user% password: %database_password% dsn: %database_driver%:host=%database_host%;dbname=%database_name%;charset=UTF8 behaviors: cacheable: RickySu\CacheableBehaviorBundle\Behavior\CacheableBehavior
在schema.xml中添加可缓存行为
使用主键或唯一索引检索数据
<?xml version="1.0" encoding="UTF-8"?> <database name="myorm" defaultIdMethod="native" namespace="ORM\StoreBundle\Model"> <table name="member"> <behavior name="cacheable" /> <column name="id" type="bigint" primaryKey="true" autoIncrement="true" required="true"/> <column name="username" type="varchar" size="45" /> <column name="email" type="varchar" size="80" /> <unique> <unique-column name="username" /> <unique-column name="email" /> </unique> </table>
// filter by id =1 and build cache $Member=MemberPeer::retrieveByPk(1); $Member=MemberQuery::create()->findPk(1); //filter by username , email and build cache $Member=MemberPeer::retrieveByUsernameEmail('username','somebody@foo.com'); $Member=MemberQuery::create() ->filterByUsername('username') ->filterByEmail('somebody@foo.com') ->findOne(); //delete cache when save or delete $Member->save(); $Member->delete();
使用一对一关系检索数据
<?xml version="1.0" encoding="UTF-8"?> <database name="myorm" defaultIdMethod="native" namespace="ORM\StoreBundle\Model"> <table name="member"> <behavior name="cacheable" /> <column name="id" type="bigint" primaryKey="true" autoIncrement="true" required="true"/> <column name="username" type="varchar" size="45" /> <column name="email" type="varchar" size="80" /> </table> <table name="member_info"> <behavior name="cacheable" /> <column name="member_id" type="bigint" primaryKey="true" required="true"/> <column name="realname" type="varchar" size="45" /> <foreign-key foreignTable="member" onDelete="cascade" onUpdate="cascade"> <reference local="member_id" foreign="id" /> </foreign-key> </table>
使用一对多关系检索数据
<?xml version="1.0" encoding="UTF-8"?> <database name="myorm" defaultIdMethod="native" namespace="ORM\StoreBundle\Model"> <table name="category"> <behavior name="cacheable" /> <column name="id" type="bigint" primaryKey="true" autoIncrement="true" required="true"/> <column name="name" type="varchar" size="45" /> </table> <table name="article"> <behavior name="cacheable" /> <column name="id" type="bigint" primaryKey="true" required="true"/> <column name="category_id" type="bigint" /> <column name="title" type="varchar" size="128" /> <column name="content" type="longvarchar" /> <foreign-key foreignTable="category" onDelete="cascade" onUpdate="cascade"> <reference local="category_id" foreign="id" /> </foreign-key> </table>
使用一对多关系检索数据
<?xml version="1.0" encoding="UTF-8"?> <database name="myorm" defaultIdMethod="native" namespace="ORM\StoreBundle\Model"> <table name="member"> <behavior name="cacheable" /> <column name="id" type="bigint" primaryKey="true" autoIncrement="true" required="true"/> <column name="username" type="varchar" size="45" /> </table> <table name="group"> <behavior name="cacheable" /> <column name="id" type="bigint" primaryKey="true" required="true"/> <column name="groupname" type="varchar" size="45" /> </table> <table name="member_group" isCrossRef="true"> <behavior name="cacheable" /> <column name="member_id" type="bigint" primaryKey="true" required="true"/> <column name="group_id" type="bigint" primaryKey="true" required="true"/> <foreign-key foreignTable="member" onDelete="cascade" onUpdate="cascade"> <reference local="member_id" foreign="data_id" /> </foreign-key> <foreign-key foreignTable="group" onDelete="cascade" onUpdate="cascade"> <reference local="group_id" foreign="id" /> </foreign-key> </table>
待办事项
当更改关系映射时清除缓存。
//set $Article belonds to $Category1 $Article->setCategory($Category1); $Article->save(); //set $Article belonds to $Category2 $Article->setCategory($Category2); $Article->save(); //we need to clear $Category1 and $Category2 reference cache.
注意
如果您想在不使用symfony2的情况下使用此行为,请参考此示例。
许可证
MIT