Code Monkey home page Code Monkey logo

eloquent-search-map's Introduction

Build Status Latest Stable Version License

Overview

Add Eloquent query search constraints effortlessly with this Eloquent macro.

This is especially handy when you find yourself building simple, optional searches often:

$model::when($request->something, function (Builder $query) {
    return $query->where('column', 'like', '%' . $request->something . '%'); 
})->get();

With this package you can do this instead:

$model::search(['something', 'otherthing'])->get();

You may create an optional column map on your model, as well as mapping request properties on the fly.

Installation

Via Composer:

composer require aviator/eloquent-search-map

In your config/app.php add Aviator\Search\ServiceProvider::class to the providers array:

'providers' => [
    ...
    Aviator\Search\ServiceProvider::class,
],

Testing

Via Composer:

composer test

Usage

Model Setup

To start, make the model you want to search implement the Searchable contract and use the SearchableTrait.

class User extends Model implements Searchable
{
    use SearchableTrait;
   
    // ..etc
}

Then set a searches array property on your model containing your searchable columns. To search in the email column using $model::search(['email']):

protected $searches = [
    'email'
];

To search in the email column using $model::search(['alias'])

protected $searches = [
    'alias' => 'email'
];

Request Aliases

By default, the search builder assumes the column name or alias matches the request data. So if you call $model::search(['something']), it will look for request('something').

Of course you can specify the request property name manually:

$model::search(['email' => 'user_email'])->get();

This tells the search builder to look for the email request data in request('user_email') instead of the default.

Custom Requests

If you need to pass a custom request into the macro, use the second parameter, which accepts an object extending Illuminate\Http\Request:

$model::search(['term'], $request)->get();

Of course, this is completely optional. If a request isn't provided, it will be retrieved from the container.

Related Models

If you want to query related models, you can! Use dot notation:

protected $searches = [
    'relation.column'
];

This will look for a relation method called company() and add a whereHas constraint to the query. For instance:

$users = User::search(['company.city'])->get();

This will look on the User model for a relation company() and search in the city attribute of that model.

By default we assume that the request will have the same property, snake cased. For the above query constraint the search builder will look for request('company_city').

This can also be mapped:

$users = User::search(['company.city' => 'city'])->get();

The search builder will now look for request('city') instead.

Other Stuff

License

This package is licensed with the MIT License (MIT).

eloquent-search-map's People

Contributors

danielsdeboer avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.