原文链接: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>
网友评论