php manual(4)
时间:2007-07-19 来源:skilldream
1.4 Model的Callbacks
在我们接近0.10.x最终版的时候,我们添加了一些model的回调函数,允许用户能够逻辑上悄悄的在model操作前或操作后执行。为了在应用中获得这种方法,在model中使用提供的参数,重载下面的这些方法
●beforeFind($conditions)
○这个回调函数在一个查询操作开始之前执行。将查询前的操作逻辑放到这个方法里面。当你在model中重写(override)这个方法时,当你想要find操作执行时候返回true,当你想要执行中止时候返回false
●afterFind($results)
○使用这个回调函数可以修改从find操作中返回的结果,或者实现其他任何的find后逻辑。这个函数的参数是model的find操作的结果,返回的是修改后的结果。
●beforeSave()
○在这个函数中放置任何保存前的逻辑。如果你像保存操作执行则返回true,否则返回false
●afterSave()
○放置任何你想要在保存后执行的代码在这个回调函数中
●beforeDelete()
○放置删除前的逻辑代码。想要删除操作执行则返回true,否则返回false
●afterDelete()
○放置任何你想要在删除后执行的代码在这个回调函数中
2. Model 变量
当你创建你的models时候,你可以设置一些特殊的变量,来获得对Cake函数的使用。
●$primaryKey
○如果这个model关联到一个数据库的table,而且数据库的主键并不是id,那么使用这个变量来告诉Cake主键的名字
●$transactional
○告诉Cake该model是否支持传输(举例 begin/commit/rolback),设置为boolea值。
●$useTable
○如果你想使用的数据库的table并不是model名的复数形式,而且你也不想改变table名,设置这个变量为table名
●$validate
○确认传递给model的数据是否正确的一个数组。查看第十章
●$useDbConfig
○还记得数据库设置中,你可以在/app/config/database.php文件中设置么?使用这个变量可以交换他们――仅仅使用数据库链接变量的名称你在database 配置文件中创建的。
3.联结(Associations)
链接是两个逻辑相关单元之间的关联。CakePHP中有四种类型的联结
●hasOne
●hasMany
●belongsTo
●hasAndBelongsToMany
因为他们比较容易混淆,所以最好举例来解释联结。
我们假设你有很多的书,有一天你坐在自己很大的图书馆里面,你突然觉得你应该将所有的书分下类。每一本书,你认为在分类里要有以下属性
●Title
●Author or Authors
●Short Description
●Categories
现在我们使用上面的例子来分别单独来看每种类型的关联
hasOne关联类型确定了这样一种情况:一个逻辑单元有一个且仅有一个其他的X类型的逻辑单元和它关联。在我们的分类例子中,每一本书都有且仅有一个title
hasMany关联类型确定了这样一种情况:一个逻辑单元有许多X类型的逻辑单元和它关联。在我们的分类例子中,每一本书可能有许多个不同的作者。
belongsTo关联类型是hasOne和hasMany关系的兄弟。一个逻辑断员属于另一个X类型的逻辑单元。一个作者属于一本书。注意到这个关系并不能确定这本书仅有一个还是有多个作者。从belongsTo关联你仅仅能得到的就是该作者属于这本书。查看这本书是否还所有其他作者,你必须使用这本书的关联关系,查看这本书是否有hasOne或hasMany关联到某些作者。
最后的关联hasAndBelongsToMany确定了这样一种情况:一个逻辑单元包含(has)许多其他的X类型的逻辑单元,这些X类型逻辑单元本身又有许多相互作用的单元。这个关联可能是最复杂的关联,但是我们也可以使用上面使用的分类例子来帮助我们更好的理解。
你可以根据下面的分类来归类每一本书
●科幻小说(Science Fiction)(Liuchen注:我们coder应该多看的书籍)
●传记
●幻想(Fantasy,不知道如何确切翻译)
●历史
现在假设你有一本Alan Turing(Liuchen注,还是不翻译成中文好,大家都知道是谁)的传记,这本书将属于(belong to)传记和历史两个分类,所以你可能认为这是hasMany关联,每一本书有许多的分类。但是,下一本书是空间编程(space program)的历史介绍,所以这本书也可以属于历史分类。这样就破坏了hasMany的规则,每一本书都可以有许多的分类,而且每个分类都可以属于多本书。这个就是hasAndBelongsToMany关联
CakePHP中这些关联需要做些什么呢?Cake可以控制许多在传统编程中各种错综复杂的关系,仅仅需要再controller中的一行代码。(原文:Cake can handle much of the blood, sweat, and tears that traditionally go into programming association with just a line of code in the controller.)我们创建一个table叫做books,每一本书都是table中的一个实体或记录,如下
Title
Author(s)
Description
Categories
开始,我们按照history of space exploration来归类,进展顺利。接着是Mr. Truing的历史自传这本书,我们遇到了麻烦。category只有一列,但是这本书却属于两个categories. 你也许认为这有
许认为这有两种解决方法
●将类别放到categories列,并使用逗号隔开,比如
history, biography
问题是如何选择,不久也许我们要通过categories列来找所有历史方面的书,但是你不能在SQL语句使用category=’history, biography’来代替 category=’history’ ,所以这不是一个好的解决办法
●为每个分类将一个实体放在table,如下面的形式:
相关阅读 更多 +
排行榜 更多 +