2016-01-23 97 views
0

我想不在cakephp 3.x之間查詢如何使用cakephp 3.x中的「不在之間」3.x

我可以像這樣使用。但我不能在兩者之間使用。

array(function ($exp) use ($field_value, $txtRule1, $txtRule2) { 
    return $exp->between($field_value, $txtRule1, $txtRule2); 
}); 

任何一個有關於如何在CakePHP中3.X之間不使用

感謝和問候的想法。

回答

2

只是把它包在QueryExpression::not()

use \Cake\Database\Expression\BetweenExpression; 
use \Cake\Database\Expression\QueryExpression; 

// ... 

function (QueryExpression $exp) use ($field_value, $txtRule1, $txtRule2) { 
    return 
     $exp->not(
      new BetweenExpression(
       $field_value, 
       $txtRule1, 
       $txtRule2, 
       $exp->typeMap()->type($field_value) 
      ) 
     ); 
} 

新的表達實例是必要的,否則你窩在自己的表達,這將導致在某些時候一個無限循環。你也可以使用克隆的情況下,你確信你是一個空表達實例

function (QueryExpression $exp) use ($field_value, $txtRule1, $txtRule2) { 
    $between = clone $exp; 
    return 
     $exp->not(
      $between->between($field_value, $txtRule1, $txtRule2) 
     ); 
} 

工作或查詢實例傳遞給調用,並創建一個新的查詢表達式實例

function (QueryExpression $exp) use ($field_value, $txtRule1, $txtRule2, $query) { 
    return 
     $exp->not(
      $query->newExpr()->between($field_value, $txtRule1, $txtRule2) 
     ); 
} 

參見