typo3

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

2018-11-23  本文已影响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>

上一篇 下一篇

猜你喜欢

热点阅读