2013-10-09 54 views
0

以下函數可用。但我想一起使用「聲明」和「喜歡」。如果我用constraint1註釋掉該行並嘗試使用:在TYPO3 Extbase版本庫中使用語句和其他類似

$constraint1 = $query->statement("SELECT * FROM pages WHERE title LIKE '" . $text . "%'"); 

...查詢不起作用。

我得到了一個錯誤:

1:PHP開捕致命錯誤:傳遞給TYPO3 \ CMS \ Extbase \持久性\通用\庫姆\ QueryObjectModelFactory參數1 :: _或()必須實現接口TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Qom \ ConstraintInterface,TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Query的實例,在439行中調用並在[...] \ typo3 \ sysext \ extbase \ Classes中定義\持久性\通用\庫姆\ QueryObjectModelFactory.php線122

功能:

/** 
    * Test 
    * 
    * @param string $text 
    * @return Objects 
    */ 
    public function findWordsByText($text) { 

     $query = $this->createQuery(); 
     $query->getQuerySettings()->setRespectStoragePage(FALSE); 

     $query->getQuerySettings()->setReturnRawQueryResult(TRUE); 

     $constraint1 = $query->like('title', $text . '%'); 
     // $constraint1 = $query->statement("SELECT * FROM pages WHERE title LIKE '" . $text . "%'"); 

     $constraint2 = $query->like('title', 'new'); 

     $constraint = array($constraint1, $constraint2); 

     $query->matching(
      $query->logicalOr($constraint) 
     ); 

     $records = $query->execute(); 

     return $records; 
    } 

如果我改變follwing線:

$query->matching(
     $query->logicalOr($constraint) 
    ); 

要 - logicalAnd:

$query->matching(
     $query->logicalAnd($constraint) 
    ); 

...查詢爲空。

回答

2

我看不到您的問題。您希望返回標題字段中包含術語$ text的所有記錄,或者在標題字段中包含「新」。因此,只需使用一個簡單的logicalOr查詢:

/** 
* Test 
* 
* @param string $text 
* @return Objects 
*/ 
public function findWordsByText($text) { 

    $query = $this->createQuery(); 
    $query->getQuerySettings()->setRespectStoragePage(FALSE); 
    $query->getQuerySettings()->setReturnRawQueryResult(TRUE); 

    $query->matching(
     $query->logicalOr(
      $query->like('title', '%' . $text . '%'), 
      $query->like('title', 'new') 
     ) 
    ); 

    return $query->execute(); 
} 

$ query-> statement()用於原始SQL查詢,不能與createQuery組合使用。順便說一句,如果$ text來自POST或GET輸入,請不要忘記清理輸入。

+0

Thx for your reply.with constraint1我想搜索pages表,constraint2是擴展表,例如tx_example_domain_model_words – Johnny

+0

總而言之,將從存儲庫中的其他表中獲取記錄。 「不能與createQuery結合」?但是,如果我用$ constraint1註釋掉該行並使用下面的行並將行更改爲: $ constraint = array($ constraint1); ...我得到記錄。 – Johnny

+0

你可以用你想要達到的目標來確定你的問題嗎(不僅僅是不起作用)?表格「頁面」和你的擴展之間有什麼關係?它們如何連接?有了createQuery,你只能查詢具有Extbase模型的表格,「頁面」默認沒有一個(仍然可以添加一個)。如果你寫下你的目標,我可以幫你找到最好的方法。 – lorenz