2

I tried to extend Illuminate\Database\Query\Builder to override various functions, but i cant make it.

I created a custom builder (CustomBuilder.php)

<?php
use Closure;
use Illuminate\Support\Collection;
use Illuminate\Database\ConnectionInterface;
use Illuminate\Database\Query\Grammars\Grammar;
use Illuminate\Database\Query\Processors\Processor;

class CustomBuilder extends Illuminate\Database\Query\Builder {

    public function get($columns = ['*'])
    {
        $builder = $this->applyScopes();

        $models = $builder->getModels($columns);

        if (count($models) > 0) {
            $models = $builder->eagerLoadRelations($models);
        }

        return $builder->getModel()->newCollection($models);
    }
}

And a custom model (CustomModel.php)

<?php
use DateTime;
use ArrayAccess;
use Carbon\Carbon;
use LogicException;
use Illuminate\Events\Dispatcher;
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Support\Contracts\JsonableInterface;
use Illuminate\Support\Contracts\ArrayableInterface;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
// use Illuminate\Database\Query\Builder as QueryBuilder;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\ConnectionResolverInterface as Resolver;
use CustomBuilder as QueryBuilder; // MyModel should now use your MyQueryBuilder instead of the default which I commented out above

abstract class CustomModel extends Illuminate\Database\Eloquent\Model
{

}
?>

What is the correct folder to put these files, and how to call it from my models?

I tried in app/Extensions, in vendor, but i get the same error. Class CustomModel cannot be found.

Thanks

Javier
  • 111
  • 5
  • Check http://stackoverflow.com/questions/23475300/how-to-replace-the-laravel-builder-class – Troyer Mar 03 '17 at 09:19
  • yes, i created my class in vendor/customlaravel/Database/Eloquent, and changed in app.php. Now how to call it from the model? With "Eloquent\CustomModel"? Thanks – Javier Mar 03 '17 at 09:46
  • You need to override `function newBaseQueryBuilder()` on the model. Returning something like: `return new CustomBuilder()` – Troyer Mar 03 '17 at 10:20
  • thanks, but the problem is that i cannot access to my class. I created my CustomModel inside vendor/customlaravel/src/CustomModel.php, and im trying to use: use CustomLaravel\CustomModel.php, but i get the error "Class CustomLaravel\CustomModel not found". In my composer.json (vendor/customlaravel) i added this: "psr-4": {"CustomLaravel\\": "src"} is correct? – Javier Mar 03 '17 at 10:35
  • Why did you created your model on vendor folder? – Troyer Mar 03 '17 at 10:46
  • I created CustomModel (to use CustomBuilder.php instead laravel Builder.php) in the vendor folder. And my entity models in app folder is not correct? – Javier Mar 03 '17 at 11:00

0 Answers0