Laravel - 使模型中的全局变量仅在模型中使用

时间:2016-11-18 11:16:12

标签: laravel laravel-5.3

我的模型中有两个变量,我在一些函数中使用

com.myexample.app.Activities

我如何提取它们并使它们全局化才能在我的模型中使用它们?

我知道它必须受到保护......但我不确定我是否需要这样说:

$firstDayThisYear = Carbon::create(date('Y'), 1, 1, 0);
$lastDayThisYear = Carbon::create(date('Y'), 12, 31, 0);

3 个答案:

答案 0 :(得分:2)

如果您要在一个模型中使用这些变量,请执行以下操作:

protected $firstDayThisYear;

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);

    $this->firstDayThisYear = Carbon::create(date('Y'), 1, 1, 0);
}

然后将其与$this->firstDayThisYear一起使用。

此外,你可以通过以下方式获得今年的开始和一年的最后一天:

Carbon::now()->startOfYear();
Carbon::now()->endOfYear()->startOfDay();

我猜它更具可读性。

答案 1 :(得分:1)

如果您只想在模型内部使用此字段,请将其声明为私有。

答案 2 :(得分:0)

您尝试这样做的方式不会起作用,因为PHP不会让您使用"表达式#34;"作为类似属性的默认值。

如果你坚持让他们static,你应该创建一个静态方法来实现这一目标。你可以这样做:

class YourModel extends Model
{
    protected static $firstDayOfThisYear;

    protected static function firstDayOfThisYear()
    {
        if (!static::$firstDayOfThisYear) {
            static::$firstDayOfThisYear = Carbon::create(date('Y'), 1, 1, 0);
        }

        return static::$firstDayOfThisYear;
    }

    public function useIt()
    {
        $firstDay = static::firstDayOfThisYear();
    }
}