수정자
소개
접속자 및 수정자
접근자를 정의하세요
접근자를 정의하려면 모델에 getFooAttribute
메서드를 생성하고 Foo에 액세스할 를 만들어야 합니다.< /code> 필드의 이름은 "카멜 표기법"으로 지정해야 합니다. 이 예에서는
first_name
속성에 대한 접근자를 정의합니다. 이 접근자는 Eloquent가 first_name
속성을 가져오려고 시도할 때 자동으로 호출됩니다. getFooAttribute
方法,要访问的 Foo
字段需使用「驼峰式」命名。 在这个示例中,我们将为 first_name
属性定义一个访问器。当 Eloquent 尝试获取 first_name
属性时,将自动调用此访问器:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 获取用户的姓名. * * @param string $value * @return string */ public function getFirstNameAttribute($value) { return ucfirst($value); } }
如你所见,字段的原始值被传递到访问器中,允许你对它进行处理并返回结果。如果想获取被修改后的值,你可以在模型实例上访问 first_name
属性:
$user = App\User::find(1); $firstName = $user->first_name;
当然,你也可以通过已有的属性值,使用访问器返回新的计算值:
/** * 获取用户的姓名. * * @return string */ public function getFullNameAttribute(){ return "{$this->first_name} {$this->last_name}"; }
{tip} 如果你需要将这些计算值添加到模型的数组 / JSON 中, 你需要追加它们.
定义一个修改器
若要定义一个修改器,则需在模型上面定义 setFooAttribute
方法。要访问的 Foo
字段使用「驼峰式」命名。让我们再来定义一个 first_name
属性的修改器。当我们尝试在模式上在设置 first_name
属性值时,该修改器将被自动调用:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 设置用户的姓名. * * @param string $value * @return void */ public function setFirstNameAttribute($value) { $this->attributes['first_name'] = strtolower($value); } }
修改器会获取属性已经被设置的值,允许你修改并且将其值设置到 Eloquent 模型内部的 $attributes
属性上。举个例子,如果我们尝试将 first_name
属性的值设置为 Sally
:
$user = App\User::find(1); $user->first_name = 'Sally';
在这个例子中, setFirstNameAttribute
方法在调用的时候接受 Sally
这个值作为参数。接着修改器会应用 strtolower
函数并将处理的结果设置到内部的 $attributes
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model{ /** * 应该转换为日期格式的属性. * * @var array */ protected $dates = [ 'seen_at', ]; }보시다시피, 필드의 원시 값이 접근자에 전달되어 이를 처리하고 결과를 반환할 수 있습니다. . 수정된 값을 얻으려면 모델 인스턴스의
first_name
속성에 액세스하면 됩니다. $user = App\User::find(1); $user->deleted_at = now(); $user->save();물론 접근자를 사용하여 기존 속성 값을 통해 새로 계산된 값을 반환할 수도 있습니다. :
$user = App\User::find(1); return $user->deleted_at->getTimestamp();
{tip} 이렇게 계산된 값을 모델의 배열/JSON에 추가해야 하는 경우 추가해야 합니다.🎜🎜🎜🎜수정자 정의🎜🎜수정자를 정의하려면 모델에서setFooAttribute
메서드를 정의해야 합니다. 액세스할Foo
필드의 이름은 "camelCase"를 사용하여 지정됩니다.first_name
속성에 대한 또 다른 수정자를 정의해 보겠습니다. 이 수정자는 스키마에서first_name
속성 값을 설정하려고 할 때 자동으로 호출됩니다. 🎜<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model{ /** * 模型日期字段的保存格式. * * @var string */ protected $dateFormat = 'U'; }🎜 수정자는 설정된 속성 값을 가져오므로 수정하고 해당 값을 Eloquent 모델 내부의$attributes
속성으로 설정하세요. 예를 들어,first_name
속성의 값을Sally
로 설정하려고 하면: 🎜<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 这个属性应该被转换为原生类型. * * @var array */ protected $casts = [ 'is_admin' => 'boolean', ]; }🎜이 예에서는setFirstNameAttribute
메서드가 호출됩니다.Sally
값을 매개변수로 허용하는 경우. 그런 다음 수정자는strtolower
함수를 적용하고 처리 결과를 내부$attributes
배열로 설정합니다. 🎜🎜🎜🎜🎜🎜🎜Date Converter
기본적으로 Eloquent는
created_at
및updated_at
필드를 Carbon으로 변환합니다.created_at
和updated_at
字段转换为 Carbon 实例,它继承了 PHP 原生的DateTime
类并提供了各种有用的方法。你可以通过设置模型的$dates
属性来添加其他日期属性:$user = App\User::find(1); if ($user->is_admin) { // }{tip} 你可以通过将模型的公有属性
$timestamps
值设置为false
来禁用默认的created_at
和updated_at
时间戳。当某个字段是日期格式时,你可以将值设置为一个 UNIX 时间戳,日期时间 (
Y-m-d
) 字符串,或者DateTime
/Carbon
实例。日期值会被正确格式化并保存到你的数据库中:<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 这个属性应该被转换为原生类型. * * @var array */ protected $casts = [ 'options' => 'array', ]; }就如上面所说,当获取到的属性包含在
$dates
属性中时,都会自动转换为 Carbon 实例,允许你在属性上使用任意的 Carbon 方法:$user = App\User::find(1); $options = $user->options; $options['key'] = 'value'; $user->options = $options; $user->save();日期格式
默认情况下,时间戳都将以
'Y-m-d H:i:s'
形式格式化。如果你需要自定义时间戳格式,可在模型中设置$dateFormat
属性。这个属性决定了日期属性将以何种形式保存在数据库中,以及当模型序列化成数组或 JSON 时的格式:/** * 这个属性应该被转化为原生类型. * * @var array */ protected $casts = [ 'created_at' => 'datetime:Y-m-d', ];属性类型转换
模型中的
$casts
属性提供了一个便利的方法来将属性转换为常见的数据类型。$casts
属性应是一个数组,且数组的键是那些需要被转换的属性名称,值则是你希望转换的数据类型。支持转换的数据类型有:integer
,real
,float
,double
,decimal:<digits>
,string
,boolean
,object
,array
,collection
,date
,datetime
, 和timestamp
。 当需要转换为decimal
类型时,你需要定义小数位的个数,如:decimal:2
示例, 让我们把以整数(
rrreee0
或1
)形式存储在数据库中的is_admin
属性转成布尔值。现在当你访问
rrreeeis_admin
인스턴스는 PHP의 기본DateTime
클래스를 상속하고 다양하고 유용한 메서드를 제공합니다. 모델의$dates
속성을 설정하여 다른 날짜 속성을 추가할 수 있습니다:필드가 날짜 형식인 경우 값을 UNIX 타임스탬프, 날짜/시간({tip} 모델의 공개 속성인
$timestamps
를 Set 값으로 설정할 수 있습니다.false
: 기본created_at
및updated_at
타임스탬프를 비활성화합니다.Y-m-d
) 문자열 또는DateTime
/로 설정할 수 있습니다. 탄소
인스턴스. 날짜 값은 올바른 형식으로 지정되어 데이터베이스에 저장됩니다: rrreee위에서 언급한 것처럼 획득한 속성이인스턴스, 속성에 어떤 Carbon 메서드든 사용할 수 있게 해줍니다: 🎜rrreee$dates
속성에 포함되면 자동으로 Carbon🎜< h4> 날짜 형식🎜기본적으로 타임스탬프는'Y-m-d H:i:s'
형식으로 형식화됩니다. 타임스탬프 형식을 맞춤설정해야 하는 경우 모델에서$dateFormat
속성을 설정할 수 있습니다. 이 속성은 모델이 배열 또는 JSON으로 직렬화될 때 날짜 속성이 데이터베이스에 저장되고 형식이 지정되는 방법을 결정합니다. 🎜rrreee🎜🎜🎜🎜🎜속성 유형 변환🎜🎜모델의$casts
속성은 속성을 일반 데이터 유형으로 변환하는 편리한 방법을 제공합니다.$casts
속성은 키가 캐스팅되어야 하는 속성의 이름이고 값이 캐스팅하려는 데이터 유형인 배열이어야 합니다. 변환을 지원하는 데이터 유형은integer
,real
,float
,double
,decimal:<입니다. ; 숫자>
,문자열
,부울
,객체
,배열
,컬렉션
코드> >,날짜
,날짜시간
및타임스탬프
.decimal
유형으로 변환해야 하는 경우 다음과 같이 소수 자릿수를 정의해야 합니다.decimal:2
🎜🎜예를 들어 정수(0
또는1
), 데이터베이스에 저장된is_admin
속성이 부울 값으로 변환됩니다. 🎜rrreee🎜이제is_admin
속성에 액세스하면 데이터베이스에 저장된 값이 정수 유형이더라도 반환 값은 항상 부울 유형으로 변환됩니다. 🎜rrreee🎜🎜🎜🎜🎜 🎜배열 및 JSON 변환
rrreee
배열
유형 변환은 직렬화된 JSON 데이터를 데이터베이스에 저장할 때 매우 유용합니다. 예: 데이터베이스에 JSON으로 직렬화된JSON
또는TEXT
필드 유형이 있고 Eloquent에배열
유형 변환을 추가하는 경우 model 을 사용하면 액세스할 때 자동으로 PHP 배열로 변환됩니다.array
类型的转换非常有用。比如:如果你的数据库具有被序列化为 JSON 的JSON
或TEXT
字段类型,并且在 Eloquent 模型中加入了array
类型转换,那么当你访问的时候就会自动被转换为 PHP 数组。一旦定义了转换,你访问
rrreeeoptions
属性时他会自动从 JSON 类型反序列化为 PHP 数组。当你设置了options
属性的值时,给定的数组也会自动序列化为 JSON 类型存储:Date 转换
当使用
변환이 정의되면date
或datetime
rrreeeoptions
속성에 액세스할 때 자동으로 JSON 유형에서 PHP 배열로 역직렬화됩니다.options
속성 값을 설정하면 지정된 배열도 자동으로 JSON 유형 저장소로 직렬화됩니다. 🎜날짜 변환🎜🎜date
또는datetime
속성을 사용할 때 날짜 형식을 지정할 수 있습니다. 이 형식은 모델을 배열 또는 JSON으로 직렬화하는 데 사용됩니다.🎜rrreee🎜이 기사는 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜