/** * @param Builder $queryBuilder * @param $key * @param $conditions * @throws \Exception */ private function whereConditions($queryBuilder, $key, $conditions) { $model = $queryBuilder->getModel(); $modelColumns = ParseHelper::getModelColumns($model); $modelRelations = ParseHelper::getModelRelations($model); if (in_array($key, $modelColumns)) { $this->whereConditionTypes($queryBuilder, $key, $conditions); } elseif (in_array($key, $modelRelations)) { // if the the key is a relation, use whereHas laravel syntax $queryBuilder->whereHas($key, function ($whereHasQuery) use($conditions) { $whereHasConditions = json_encode(array($whereHasQuery->getModel()->getKeyName() => $conditions)); $this->where($whereHasQuery, $whereHasConditions); }); } else { ParseHelper::throwException(102, $key); } }