Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/owowagency/applies-http-query
https://github.com/owowagency/applies-http-query
Last synced: 11 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/owowagency/applies-http-query
- Owner: owowagency
- Created: 2019-07-11T10:57:54.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-08-18T09:43:01.000Z (over 1 year ago)
- Last Synced: 2024-12-19T21:50:10.891Z (20 days ago)
- Language: PHP
- Size: 21.5 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# owowagency/applies-http-query
This package contains a trait that can be used on Eloquent models. The trait adds a `httpQuery` scope that can apply a "search" and "order by". It will only apply these two when certain url query parameters are present.
## Install
```
composer require owowagency/applies-http-query
```This package supports Laravel version 5 to 7. Check the [1.x branch](https://github.com/owowagency/applies-http-query/tree/1.x).
## Usage
Add the trait to the model:
```
use OwowAgency\AppliesHttpQuery\AppliesHttpQuery;class Post extends Model
{
use AppliesHttpQuery
}
```Specify the columns on which it can search:
```
/**
* Http queryable rules.
*
* @var array
*/
protected $httpQueryable = [
'columns' => [
'posts.title'
'users.name',
],
'joins' => [
'users' => ['posts.user_id','users.id'],
'countries' => ['users.country_id', 'countries.id']
],
];
```Call the scope:
```
Post::httpQuery()->paginate();// Like all other scopes it can be combined with other clauses.
Post::whereNull('deleted_at')->httpQuery()->get();
```In order for the scope to work, certain query parameters should be present in the url:
- `search`, the value that will be searched for.
- `order_by`, the column that will be ordered on.
- `sort_by`, the direction of the ordering. By default this is `asc`.### Search
```
https://mysite.com/posts?search=test
```Will result in the following query:
```
SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id WHERE (posts.title LIKE "%test%" OR users.name LIKE "%test%")
```### Order by
```
https://mysite.com/posts?order_by=user.name
```Will result in the following query:
```
SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id ORDER BY users.name ASC
``````
https://mysite.com/posts?order_by=user.country.name&sort_by=desc
```Will result in the following query:
```
SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id INNER JOIN countries ON users.country_id = country.id ORDER BY countries.name desc
```