推动自动生成的类

时间:2015-08-03 11:06:33

标签: propel

我已经将一个用 codeIgnotor Propel 1.6 编写的项目作为ORM。我使用的唯一ORM是Eloquent,所以我在Propel中看到所有这些类真的很困惑。

当我使用已定义的模式运行推进蝙蝠文件时,我得到三个类,例如

对于我得到的用户

1 - User.php       extends    BaseUser
2 - UserPeer.php   extends    BaseUserPeer
3 - UserQuery.php  extends    BaseUserQuery

根据推进文档,Peer Class是为了向后兼容,这意味着什么。

并且如果有人能够解释每个班级内部将定义哪种类型的功能。

自动生成的版本中还有 om 文件夹。在这些类中添加方法是个好主意。

任何帮助都会得到真正的赞赏。如果有人可以使用用户示例进行解释。

1 个答案:

答案 0 :(得分:2)

  1. 这是一篇非常好的推文文章:Propel By Example
  2. User.php表示User表中的一行,以及UserQuery.php中的查询/更新逻辑
  3. om 文件夹包含扩展“用户”的类定义,因此请勿触摸该文件夹,每次构建模型时都会被覆盖
  4. 上面#2的例子

    场景#1:更新用户后,将TimeUpdated列设置为unix当前时间。

    场景#2:您希望能够获得用户全名

    实现:

    <?php
    class User extends BaseUser
    {
        public function preUpdate(PropelPDO $oConn=null)
        {
            $this->setTimeUpdated(time());
        return true;
        }// Will be executed everytime you call '->save()' on an existing row
    
        public function getName()
        {
            return $this->getFirstName() . ' ' . $this->getLastName();
        }
    ...
    

    场景#2的用法:

    $User = UserQuery::create()->findPk(1);
    echo 'FirstName: ' . $User->getName();
    

    场景#3:您想为男性青少年用户添加过滤器 实现:

    <?php
    class UserQuery extends BaseUserQuery
    {
        public function MaleTeen()
        {
            return $this
                ->filterByGender('M')
                ->filterByAge([
                    'min' => 13,
                    'max' => 19
                ]);
        }
    ...
    

    用法:$Teens = UserQuery::create()->MaleTeen()->find(); // Did someone say D.R.Y?

    我希望它有所帮助。