LoginSignup
14
15

More than 5 years have passed since last update.

【Laravel(Lumen)】異なるモデルで共通する処理はなるべくtraitを使っていきたい

Last updated at Posted at 2018-03-22

なるべくtraitを使っていってファットモデルをなくしていきたい

traitを作るべきタイミング

  • 異なるモデルに同じ処理を書くことになったとき

traitの例

例)データを登録するメソッド

<?php

namespace App;

use Illuminate\Support\Facades\DB;

trait Register 
{
    /**
     * DB登録処理
     * 
     * @param array $attributes
     * @return bool
     */
    public function register(array $attributes)
    {
        DB::beginTransaction();
        try {
            $this->create($attributes);
            DB::commit();
            return true;
        } catch (\PDOException $e) {
            DB::rollBack();
            return false;
        } catch (\Exception $e) {
            return false;
        }

    }
}

traitの使い方

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class Example extends Model
{
    use \App\Register; // このクラス内で使うtraitをuseする

    public function store($attributes)
    {
        return $this->register($attributes); // あたかもこのクラスにあるメソッドのように扱える
    }

    // 以下略

}

traitのテスト

例)traitを使うことができるかのテスト(PHPUnit)

<?php

use App\Register;

class RegisterTest extends TestCase
{
    public function test_Registerのtraitを使うことができる()
    {
        $mock = $this->getMockForTrait(Register::class);
        $this->assertInternalType('object', $mock);
    }
}

おわり

  • traitのテストって↑以外のテストしなくていいんですかねぇ・・・?
  • traitを作るべきタイミングって他にもあるんですかね?
  • むやみやたらに作るもんでもないので厳選していきたい

参考(にしたかも)

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15