Laravel Eloquentモデルの剪定(Pruning)方法


  1. モデルで表示する属性を制御する Eloquentモデルでは、$visible$hiddenプロパティを使用してモデルの属性を制御できます。$visibleには表示したい属性のリストを指定し、$hiddenには非表示にしたい属性のリストを指定します。例えば、以下のように使用します。
class Post extends Model
{
    protected $visible = ['title', 'content'];
    protected $hidden = ['secret_attribute'];
}

上記の例では、titlecontent属性は表示され、secret_attributeは非表示になります。

  1. 剪定メソッドを定義する Eloquentモデルには、toArrayメソッドをオーバーライドして剪定ロジックを実装することもできます。以下に例を示します。
class Post extends Model
{
    // ...
    public function toArray()
    {
        $data = parent::toArray();
        unset($data['secret_attribute']);
        return $data;
    }
}

上記の例では、toArrayメソッド内で$data配列からsecret_attributeを削除することで、剪定を行っています。

  1. リレーションシップの剪定 もしモデルにリレーションシップがある場合、関連する属性を剪定することもできます。例えば、以下のように使用します。
class Post extends Model
{
    // ...
    public function toArray()
    {
        $data = parent::toArray();
        unset($data['secret_attribute']);
        $data['comments'] = $this->comments->map(function ($comment) {
            return $comment->only(['id', 'content']);
        });
        return $data;
    }
}

上記の例では、commentsリレーションシップの各コメントモデルからidcontent属性のみを抽出しています。

これらの方法を使用することで、Eloquentモデルを剪定し、必要な属性のみを表示することができます。お好みの方法を選択し、モデルをスリムに保つために活用してください。