Example #1
0
 /**
  * Determine the operator for count relation query and set 'not' appropriately.
  *
  * @param  string $method
  * @param  \Sofa\Eloquence\ArgumentBag $args
  * @return string
  */
 protected function getMappedOperator($method, ArgumentBag $args)
 {
     if ($not = $args->get('not')) {
         $args->set('not', false);
     }
     if ($null = $this->isWhereNull($method, $args)) {
         $args->set('not', true);
     }
     return $not ^ $null ? '<' : '>=';
 }
Example #2
0
 /**
  * Determine whether where is a whereNull by the arguments passed to where method.
  *
  * @param  \Sofa\Eloquence\ArgumentBag $args
  * @return boolean
  */
 protected function isWhereNullByArgs(ArgumentBag $args)
 {
     return is_null($args->get('operator')) || is_null($args->get('value')) && !in_array($args->get('operator'), ['<>', '!=']);
 }
Example #3
0
 /**
  * Order query by meta attribute.
  *
  * @param  \Sofa\Eloquence\Builder $query
  * @param  \Sofa\Eloquence\ArgumentBag $args
  * @param  string $alias
  * @return \Sofa\Eloquence\Builder
  */
 protected function orderByMeta(Builder $query, $args, $alias)
 {
     $query->with('metaAttributes')->getQuery()->orderBy("{$alias}.meta_value", $args->get('direction'));
     return $query;
 }
Example #4
0
 /**
  * Call custom handlers for where call.
  *
  * @param  string $method
  * @param  \Sofa\Eloquence\ArgumentBag $args
  * @return mixed
  */
 protected function callHook($method, ArgumentBag $args)
 {
     if ($this->hasHook($args->get('column')) || in_array($method, ['select', 'addSelect'])) {
         return $this->getModel()->queryHook($this, $method, $args);
     }
     return $this->callParent($method, $args->all());
 }
Example #5
0
 /**
  * Get the relation constraint closure.
  *
  * @param  string $method
  * @param  \Sofa\Eloquence\ArgumentBag $args
  * @return \Closure
  */
 protected function getMetaWhereConstraint($method, ArgumentBag $args)
 {
     $column = $args->get('column');
     $args->set('column', 'meta_value');
     if ($method === 'whereBetween') {
         return $this->getMetaBetweenConstraint($column, $args->get('values'));
     }
     return function ($query) use($column, $method, $args) {
         $query->where('meta_key', $column);
         if ($args->get('value') || $args->get('values')) {
             call_user_func_array([$query, $method], $args->all());
         }
     };
 }