This package is a good way to organize subqueries of your models.
- laravel 5.5+
The package is available on packagist.
composer require churakovmike/laravel-extended-builder
- You need to create a class that will be inherited from ChurakovMike\ExtendedBuilder\ExtendedQuery as an example
<?php
namespace App;
use ChurakovMike\ExtendedBuilder\ExtendedQuery;
/**
* Class UserQuery
* @package App
*
* @property string $modelClass
*/
class UserQuery extends ExtendedQuery
{
public function isActive()
{
return $this->where('status', true);
}
public function hasName($name)
{
return $this->where('name', $name);
}
}
- Then you need to add a method to the main model that will call query builder.
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
/**
* Class User
* @package App
*/
class User extends Authenticatable
{
public static function where()
{
return new \App\UserQuery(get_called_class());
}
}
- Now you can call subqueries from extended query, as well as use regular Bulder methods, see an example
$user = User::where()
->isActive()
->first();
Function call chain example:
$user = User::where()
->isActive()
->hasName('Mike')
->first();