buglerv / laravel-helpers
Some helpers for Laravel like Traits and other...
1.1.1
2022-09-23 12:01 UTC
Requires
- illuminate/support: ^8.0|^9.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
README
Некоторые файлы для распространения между Laravel проектами.
Buglerv\LaravelHelpers\Traits\ChainableMethods
Трейт используется для того, чтобы объединять методы класса в цепочку для последовательного вызова.
class A { use \Buglerv\LaravelHelpers\Traits\ChainableMethods; protected $count = 2; public function sub() { return --$this->count; } public function add() { return ++$this->count; } public function echo() { echo $this->count; return $this->count; } } $a = new A; // Объединения с OR var_dump($a->subOrEcho()); // int(1) var_dump($a->subOrEcho()); // 0 bool(false) // Объединение с AND var_dump($a->addAndEcho()); // 1 int(1) var_dump($a->subAndEcho()); // bool(false) // Так же есть ключевые слова True и False var_dump($a->addAndFalse()); // bool(false) var_dump($a->subOrTrue()); // bool(true)
Buglerv\LaravelHelpers\Eloquent\GroupEagerLoading
Используется для ручной загрузки отношений Eloquent моделей.
Допустим, есть модель Project
у которой есть 2 отношения на модель Person
через методы frontendProgrammer
и backendProgrammer
. Через Project::load()
можно загрузить оба отношения, но каждое из них в любом случае будет подгружаться через отдельное обращение к базе данных. Так можно добиться одного запроса:
$models = Project::all(); \Buglerv\LaravelHelpers\Eloquent\GroupEagerLoading::load($models,Person::class,[ 'frontendProgrammer' => 'frontend_programmer_id', 'backendProgrammer' => 'backend_programmer_id', ]);
Можно подгрузить softDeleted
модели:
\Buglerv\LaravelHelpers\Eloquent\GroupEagerLoading::loadTrashed(...);
Можно подгрузить модели с дополнительными отношениями:
\Buglerv\LaravelHelpers\Eloquent\GroupEagerLoading::loadWith(...,'projects');
Или объединить оба варианта:
\Buglerv\LaravelHelpers\Eloquent\GroupEagerLoading::loadTrashedWith(...,'projects');