share facebook facebook twitter menu hatena pocket slack

2018.06.04 MON

【laravel】repositoryの書き方

laravelでのrepositoryの良さげな書き方を紹介します。

class UserRepository implements UserInterface
{
    protected $user;
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    protected function byFilter(array $filter){
        if (array_key_exists('name', $filter)){
            $data->where('name', $filter['name']);
        };
        if (array_key_exists('email', $filter)){
            $data->where('email', $filter['email']);
        };
        if (array_key_exists('point', $filter)){
            $data->where('point', $filter['point']);
        };
        if (array_key_exists('role', $filter)){
            $data->where('role', $filter['role']);
        };
        return $data;
    }

    public function sumPointByFilter(array $filter = [])
    {
        $data = $this->byFilter($filter);
        $data = $data->sum('point');

        return $data;
    }

    public function existsByFilter(array $filter = [])
    {
        $data = $this->byFilter($filter);
        $data = $data->exists();
        return $data;
    }

    public function getByFilter(array $filter = [])
    {
        $data = $this->byFilter($filter);
        $data = $data->get();
        return $data;
    }

}

こうすればgetBy***みたいのを都度書く必要が無くなりRepositoryがスッキリするのではと思いました。

※「もっと良さそうな書き方があるよ」って方は教えてください。

元記事はこちら

【laravel】repositoryの書き方

宇敷 久里也

宇敷 久里也

WEBプログラマです。WEBに関することは、なんでも興味あります。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。