/** * Allow custom where method calls on the builder. * * @codeCoverageIgnore * * @param \Sofa\Eloquence\Builder $query * @param string $method * @param \Sofa\Eloquence\ArgumentBag $args * @return \Sofa\Eloquence\Builder */ public function queryHook(Builder $query, $method, ArgumentBag $args) { $this->unwrapHooks(__FUNCTION__); $pipes = $this->unwrappedHooks[__FUNCTION__]; return (new Pipeline($pipes))->send($query)->with(new ArgumentBag(['method' => $method, 'args' => $args]))->to(function ($query) use($method, $args) { return call_user_func_array([$query, 'callParent'], [$method, $args->all()]); }); }
/** * Get the relation constraint closure. * * @param string $method * @param \Sofa\Eloquence\ArgumentBag $args * @return \Closure */ protected function getMappedWhereConstraint($method, ArgumentBag $args) { return function ($query) use($method, $args) { call_user_func_array([$query, $method], $args->all()); }; }
/** * 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()); } }; }