/** * Add a relationship count condition to the query. * * @param string $relation * @param string $operator * @param int $count * @return \Illuminate\Database\Eloquent\Builder */ public function has($relation, $operator = '>=', $count = 1) { $instance = $this->model->{$relation}(); $query = $instance->getRelationCountQuery($instance->getRelated()->newQuery()); $this->query->mergeBindings($query->getQuery()); return $this->where(new Expression('(' . $query->toSql() . ')'), $operator, $count); }
/** * Merge the "wheres" from a relation query to a has query. * * @param \Illuminate\Database\Eloquent\Builder $hasQuery * @param \Illuminate\Database\Eloquent\Relations\Relation $relation * @return void */ protected function mergeWheresToHas(Builder $hasQuery, Relation $relation) { // Here we have the "has" query and the original relation. We need to copy over any // where clauses the developer may have put in the relationship function over to // the has query, and then copy the bindings from the "has" query to the main. $relationQuery = $relation->getBaseQuery(); $hasQuery->mergeWheres($relationQuery->wheres, $relationQuery->getBindings()); $this->query->mergeBindings($hasQuery->getQuery()); }
/** * Merge an array of bindings into our bindings. * * @param \Illuminate\Database\Query\Builder $query * @return $this * @static */ public static function mergeBindings($query) { return \Illuminate\Database\Query\Builder::mergeBindings($query); }