leroy-merlin-br / mongolid-laravel

Easy, powerful and ultrafast MongoDB ODM for Laravel.
MIT License
240 stars 41 forks source link

create legacy laravel model builder methods? #154

Open shopapps opened 2 years ago

shopapps commented 2 years ago

Hi,

Just discovered this project and am interested to see how it performs against laravel-mongodb

to do this we have lots of legacy laravel model builder methods that will need to have equivalents. I'm happy to write the overrides but need some pointers on getting started.

for example to use livewire-datatables a builder needs to be returned from an example query of:

public function query()
{
         return Order::query()
                    ->when($this->getFilter('search'), function($query, $term){
                        $query = $query->search((string)$term);
                        $query = $query->searchCustomer((string)$term);
                        $query = $query->searchExtras((string)$term);
                        return $query;
                    })
                    ->when($this->getFilter('status'), fn($query, $status) => $query->statusSearch((int)$status))
                    ->whereNull(Order::CANCELLED_AT)
                    ->orderBy(Order::CREATED_AT, 'desc');
}

then later in code, it calls

$query->paginate();

to return a LAP object.

So in this instance I need to create new methods for query(), when() , whereNull() , OrderBy() and paginate() which (I assume) will be via an extended Query/Builder.php (??) class

is this viable? is there a better way of handling this?

my start point was to override the MongolidModel with something like:


namespace App\Models\Overrides\Mongolid;

use MongolidLaravel\MongolidModel as BaseMongolidModel;

class MongolidModel extends BaseMongolidModel
{
    public static function query() {
//        return (new static())->getLocalMock();
          return Container::make(Builder::class);
    }
}

what would you suggest I return in the initial ->query() call? :-)

thanks in advance for any help.