美文网首页typo3
TYPO3 数据库对象化增、删、改、查

TYPO3 数据库对象化增、删、改、查

作者: 是彬不是杉 | 来源:发表于2018-11-23 09:56 被阅读0次

    原文链接:https://www.whongbin.cn/index/article/detail/id/32.html

    说起来我已经混迹TYPO3开发两年了,但是对于typo3的了解还是一知半解,TYPO3强大的简直无边啊,下面分享下我在二次开发typo3的过程中积累的一些有用的知识点和代码段

    在存储库中的条件查询方法

    // 初始化对象查询query-object
    $query = $this->createQuery();
     
    // 且(AND) / 或(OR) / 非(NOT)
    $query->logicalAnd($constraints);
    $query->logicalOr($constraints);
    $query->logicalNot($constraints);
     
    // statement 方法
    $query->statement("SELECT * FROM my_table WHERE 1 " . $GLOBALS['TSFE']->sys_page->enableFields("my_table")); // string
     
    // 排序 (ORDER BY)
    $query->setOrderings(array("field" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING)); // array
    $query->setOrderings(array("field" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING)); // array
     
    // 分页 (LIMIT)
    $query->setLimit($limit); // integer
     
    // OFFSET
    $query->setOffset($offset); // integer
     
    // 总数 COUNT()
    $query->count(); // execute query and get amount of matches
     
    // 执行 query
    $query->execute();
     
    // 获取第一条数据 (LIMIT 1)
    $query->getFirst();
     
    /*
     * 范例:
     * typical method
     */
    public function findSomethingSpecial() {
      $query = $this->createQuery();
      $query->matching(
        $query->logicalAnd(
          $query->equals("mySpecialProperty", "isMySpecialValue"),
          $query->equals("someOtherProperty", "isAnotherValue")
        )
      );
     
      $query->setOrderings(array("crdate" => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING))
        ->setOffset(10)
        ->setLimit(20);
     
      return $query->execute();
    }
    

    TYPO3中默认的一些数据操作方法(助手函数)

    // 增加一条数据
    $myRepository->add($myModel);
     
    // 删除一条数据
    $myRepository->remove($myModel);
     
    // 删除所有数据
    $myRepository->removeAll(); // don't do this at home
     
    // 替换数据
    $myRepository->replace($myModel, $myOtherModel);
     
    // 更新一条数据
    $myRepository->update($myModifiedModel);
     
    // 获取数据总数
    $myRepository->countAll(); // get the amount of all objects
     
    // 按照指定字段统计总数
    $myRepository->countBy[myProperty]($thisMustMatchMyProperty);
     
    // 查询指定数据
    $myRepository->findByUid($theUid); // returns ONE Model-Object (...if found)
     
    // 查询所有数据
    $myRepository->findAll(); // only constraint by enablecolumns, language and storagePid
     
    // 按照指定字段查找所有符合条件的数据
    $myRepository->findBy[myProperty]($thisMustMatchMyProperty); // returns a Storage-object
     
    // 按照指定字段查找符合条件的第一条数据
    $myRepository->findOneBy[myProperty]($thisMustMatchMyProperty); // returns ONE Model-Object (...if found)
    

    约束条件

    // = 
    $query->equals($myProperty, $equalsThis, $caseSensitive = true);
     
    // <
    $query->lessThan($myProperty, $isLessThanThis);
     
    // >
    $query->greaterThan($myProperty, $isGreaterThanThis);
     
    // <=
    $query->lessThanOrEqual($myProperty, $isLessThanOrEqualThis);
     
    // >=
    $query->greaterThanOrEqual($myProperty, $isGreaterThanOrEqualThis);
     
    // %search%
    $query->like($myProperty, $theLikeString);
     
    // contains
    $query->contains($myProperty, $hasThisValue);
     
    // in
    $query->in($myProperty, $isInThisObjectOrArray);
    

    初始化对象配置Query-Settings

    // 使用方法1: 所有查询中使用
    public function initializeObject() {
      // 获取配置
      $querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
     
      // 修改设置
      $querySettings->setSomething();
     
      // 将设置保存为默认值
      $this->setDefaultQuerySettings($querySettings);
    }
    
    // 使用方法2: 特定查询中使用
    public function findSomething() {
      $query = $this->createQuery();
      $query->getQuerySettings()->setSomething();
      // ...
      return $query->execute();
    }
     
    // 常用配置:
    $querySettings->setRespectStoragePage(FALSE); // 忽略数据存储id storagePid
    $querySettings->setStoragePageIds(array(1, 2, 3)); // 指定数据存储id查询 storagePids
    $querySettings->setRespectEnableFields(FALSE); // 忽略enableFields(...已弃用)
    $querySettings->setIgnoreEnableFields(TRUE); // 忽略TCA中定义的字段 "enablecolumns"
    $querySettings->setEnableFieldsToBeIgnored(array('disabled', 'starttime')); // 只忽略指定字段
    $querySettings->setIncludeDeleted(TRUE); // 假删除
    $querySettings->setRespectSysLanguage(FALSE); // 忽略多语言
    $querySettings->setSysLanguageUid(2); // 查询指定语言
    

    强制执行数据库操作

    /*
     * 在控制器中操作使用
     * Action-Method in Controller...
     */
    // 新增一个model对象
    $newItem = new \VENDOR\MyExt\Domain\Model\Item();
    $newItem->setSomeStuff();
    $myItemRepository->add($newItem);
     
    // 这局代码具体是做什么的我不是很了解,但是执行这个合一获取数据库插入的最新一条数据
    $persistenceManager = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager');
    $persistenceManager->persistAll();
     
    $this->view->assign("newItem", $newItem);
    
    /*
     * Fluid标签中使用
     */
    <f:link.action controller="Item" action="show" arguments="{item:newItem}">显示新的项目</f:link.action>
    
    

    相关文章

      网友评论

        本文标题:TYPO3 数据库对象化增、删、改、查

        本文链接:https://www.haomeiwen.com/subject/dzbdqqtx.html