扩展 Laravel 的基础模型
Extending Laravel's base model
在 Laravel 中,所有模型都扩展了基本模型。
laravel eloquent 模型有一个名为 $dates 的受保护数组属性。添加到此数组的每个日期都会自动转换为 Carbon 实例。
我想用类似的功能扩展基本模型。例如,使用受保护的 $times 属性。所有时间属性都将转换为 Carbon 实例
你会怎么做?
提前致谢。
想做什么都很简单。基本 PHP 知识。
如果要添加一些其他字段以转换为 Carbon
个实例,只需将它们添加到 $dates
数组
如果您想添加一些新参数,只需扩展 laravel 的模型,如下所示
<?php
namespace App;
class MyModel extends \Illuminate\Database\Eloquent\Model
{
protected $awesomness = [];
/**
* override method
*
*/
public function getAttributeValue($key)
{
$value = $this->getAttributeFromArray($key);
// If the attribute has a get mutator, we will call that then return what
// it returns as the value, which is useful for transforming values on
// retrieval from the model to a form that is more useful for usage.
if ($this->hasGetMutator($key))
{
return $this->mutateAttribute($key, $value);
}
// If the attribute exists within the cast array, we will convert it to
// an appropriate native PHP type dependant upon the associated value
// given with the key in the pair. Dayle made this comment line up.
if ($this->hasCast($key))
{
return $this->castAttribute($key, $value);
}
// If the attribute is listed as a date, we will convert it to a DateTime
// instance on retrieval, which makes it quite convenient to work with
// date fields without having to create a mutator for each property.
if (in_array($key, $this->getDates()) && !is_null($value))
{
return $this->asDateTime($value);
}
//
//
// that's the important part of our modification
//
//
if (in_array($key, $this->awesomness) && !is_null($value))
{
return $this->doAwesomness($value);
}
return $value;
}
public function doAwesomness($value)
{
//do whatever you want here
return $value;
}
}
那么你所有的模型只需要扩展 \App\MyModel
class 而不是 \Illuminate\Database\Eloquent\Model
在 Laravel 中,所有模型都扩展了基本模型。
laravel eloquent 模型有一个名为 $dates 的受保护数组属性。添加到此数组的每个日期都会自动转换为 Carbon 实例。
我想用类似的功能扩展基本模型。例如,使用受保护的 $times 属性。所有时间属性都将转换为 Carbon 实例
你会怎么做?
提前致谢。
想做什么都很简单。基本 PHP 知识。
如果要添加一些其他字段以转换为 Carbon
个实例,只需将它们添加到 $dates
数组
如果您想添加一些新参数,只需扩展 laravel 的模型,如下所示
<?php
namespace App;
class MyModel extends \Illuminate\Database\Eloquent\Model
{
protected $awesomness = [];
/**
* override method
*
*/
public function getAttributeValue($key)
{
$value = $this->getAttributeFromArray($key);
// If the attribute has a get mutator, we will call that then return what
// it returns as the value, which is useful for transforming values on
// retrieval from the model to a form that is more useful for usage.
if ($this->hasGetMutator($key))
{
return $this->mutateAttribute($key, $value);
}
// If the attribute exists within the cast array, we will convert it to
// an appropriate native PHP type dependant upon the associated value
// given with the key in the pair. Dayle made this comment line up.
if ($this->hasCast($key))
{
return $this->castAttribute($key, $value);
}
// If the attribute is listed as a date, we will convert it to a DateTime
// instance on retrieval, which makes it quite convenient to work with
// date fields without having to create a mutator for each property.
if (in_array($key, $this->getDates()) && !is_null($value))
{
return $this->asDateTime($value);
}
//
//
// that's the important part of our modification
//
//
if (in_array($key, $this->awesomness) && !is_null($value))
{
return $this->doAwesomness($value);
}
return $value;
}
public function doAwesomness($value)
{
//do whatever you want here
return $value;
}
}
那么你所有的模型只需要扩展 \App\MyModel
class 而不是 \Illuminate\Database\Eloquent\Model