original_string: protected function _conjugate($part, $append, $conjunction, $types)
      {
          $expression = $this->_parts[$part] ?: $this->newExpr();
          if (empty($append)) {
              $this->_parts[$part] = $expression;
  
              return;
          }
  
          if ($expression->isCallable($append)) {
              $append = $append($this->newExpr(), $this);
          }
  
          if ($expression->getConjunction() === $conjunction) {
              $expression->add($append, $types);
          } else {
              $expression = $this->newExpr()
                  ->setConjunction($conjunction)
                  ->add([$expression, $append], $types);
          }
  
          $this->_parts[$part] = $expression;
          $this->_dirty();
      }
code: protected function _conjugate($part, $append, $conjunction, $types)
      {
          $expression = $this->_parts[$part] ?: $this->newExpr();
          if (empty($append)) {
              $this->_parts[$part] = $expression;
  
              return;
          }
  
          if ($expression->isCallable($append)) {
              $append = $append($this->newExpr(), $this);
          }
  
          if ($expression->getConjunction() === $conjunction) {
              $expression->add($append, $types);
          } else {
              $expression = $this->newExpr()
                  ->setConjunction($conjunction)
                  ->add([$expression, $append], $types);
          }
  
          $this->_parts[$part] = $expression;
          $this->_dirty();
      }
code_tokens: protected function _conjugate ( $ part , $ append , $ conjunction , $ types ) { $ expression = $ this -> _parts [ $ part ] ? : $ this -> newExpr ( ) ; if ( empty ( $ append ) ) { $ this -> _parts [ $ part ] = $ expression ; return ; } if ( $ expression -> isCallable ( $ append ) ) { $ append = $ append ( $ this -> newExpr ( ) , $ this ) ; } if ( $ expression -> getConjunction ( ) === $ conjunction ) { $ expression -> add ( $ append , $ types ) ; } else { $ expression = $ this -> newExpr ( ) -> setConjunction ( $ conjunction ) -> add ( [ $ expression , $ append ] , $ types ) ; } $ this -> _parts [ $ part ] = $ expression ; $ this -> _dirty ( ) ; }
docstring: Helper function used to build conditions by composing QueryExpression objects.
  
  @param string $part Name of the query part to append the new part to
  @param string|null|array|\Cake\Database\ExpressionInterface|callable $append Expression or builder function to append.
  @param string $conjunction type of conjunction to be used to operate part
  @param array $types associative array of type names used to bind values to query
  @return void
docstring_tokens: Helper function used to build conditions by composing QueryExpression objects .