master

laravel/framework

Last updated at: 29/12/2023 09:22

Attribute.php

TLDR

This file contains the Attribute class, which represents an attribute accessor/mutator in Laravel's Eloquent ORM. It provides methods for creating new attribute accessors/mutators, enabling/disabling caching for the attribute, and more.

Classes

Attribute

The Attribute class represents an attribute accessor/mutator in Laravel's Eloquent ORM. It has the following properties:

  • $get: The attribute accessor (callable).
  • $set: The attribute mutator (callable).
  • $withCaching: Indicates if caching is enabled for this attribute (boolean).
  • $withObjectCaching: Indicates if caching of objects is enabled for this attribute (boolean).

The class provides the following methods:

  • __construct(callable $get = null, callable $set = null): Creates a new attribute accessor/mutator with optional getter and setter callbacks.
  • make(callable $get = null, callable $set = null): static: Creates a new attribute accessor/mutator with optional getter and setter callbacks (static method).
  • get(callable $get): static: Creates a new attribute accessor with a getter callback (static method).
  • set(callable $set): static: Creates a new attribute mutator with a setter callback (static method).
  • withoutObjectCaching(): static: Disables object caching for the attribute (instance method).
  • shouldCache(): static: Enables caching for the attribute (instance method).
<?php

namespace Illuminate\Database\Eloquent\Casts;

class Attribute
{
    /**
     * The attribute accessor.
     *
     * @var callable
     */
    public $get;

    /**
     * The attribute mutator.
     *
     * @var callable
     */
    public $set;

    /**
     * Indicates if caching is enabled for this attribute.
     *
     * @var bool
     */
    public $withCaching = false;

    /**
     * Indicates if caching of objects is enabled for this attribute.
     *
     * @var bool
     */
    public $withObjectCaching = true;

    /**
     * Create a new attribute accessor / mutator.
     *
     * @param  callable|null  $get
     * @param  callable|null  $set
     * @return void
     */
    public function __construct(callable $get = null, callable $set = null)
    {
        $this->get = $get;
        $this->set = $set;
    }

    /**
     * Create a new attribute accessor / mutator.
     *
     * @param  callable|null  $get
     * @param  callable|null  $set
     * @return static
     */
    public static function make(callable $get = null, callable $set = null): static
    {
        return new static($get, $set);
    }

    /**
     * Create a new attribute accessor.
     *
     * @param  callable  $get
     * @return static
     */
    public static function get(callable $get)
    {
        return new static($get);
    }

    /**
     * Create a new attribute mutator.
     *
     * @param  callable  $set
     * @return static
     */
    public static function set(callable $set)
    {
        return new static(null, $set);
    }

    /**
     * Disable object caching for the attribute.
     *
     * @return static
     */
    public function withoutObjectCaching()
    {
        $this->withObjectCaching = false;

        return $this;
    }

    /**
     * Enable caching for the attribute.
     *
     * @return static
     */
    public function shouldCache()
    {
        $this->withCaching = true;

        return $this;
    }
}