如何巧妙运用Laravel模型实现高效数据管理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1405个文字,预计阅读时间需要6分钟。
下面是由Laravel教程栏目为初学者整理的Laravel模型使用技巧,希望对需要的朋友有所帮助!
引言:本文将介绍Laravel模型的一些修改器和职责。
修改器:模型修改器是用于在模型保存之前或之后修改属性值的方法。例如,可以创建一个修改器来自动生成模型的唯一标识符。
职责:模型职责是指将模型的行为和逻辑与数据库操作分离。例如,可以将模型的创建、更新和删除逻辑放在不同的方法中。
修改器示例:phpclass User extends Model{ protected static function boot() { parent::boot();
static::creating(function ($user) { $user->unique_identifier=Str::uuid(); }); }}
模型职责示例:phpclass User extends Model{ public function save(array $options=[]) { if ($this->isDirty('email')) { $this->sendEmailConfirmation(); }
return parent::save($options); }
protected function sendEmailConfirmation() { // 发送邮件确认逻辑 }}
使用方法:使用模型修改器和职责的方法如下:
1. 创建一个模型修改器,在模型类中使用`protected static function boot()`方法注册。
2.在模型中定义职责方法,并在保存模型时调用这些方法。
例如,使用表单单例获取用户:
php$user=User::find(1);$user->form();这样,Laravel模型的使用就变得更加灵活和高效。
下面由Laravel教程栏目给大家分享Laravel模型使用的2个小技巧 ,希望对需要的朋友有所帮助!
引言
本文说说模型的修改器,以及模型的职责。
修改器
有没有这样一种用法:使用表单获取一个字段的输入,使用加密算法,或者摘要方式对字段处理后存入数据库,
这在数据库密码字段是常用的处理手段。
如果写操作在程序内到处都是,零散地分布在业务代码的各个地方,我们总不至于每次都要写一次相同的代码吧?
相同的业务逻辑,提取出来,抽象出来,只写一次,这才是高效代码的王道。
laravel这个注重设计模式的现代化框架,自然是不会做无用功。于是对应读取器,就有了修改器,专门用于写入数据库时起作用。
比如对于写操作,某个字段的值写入,默认使用 bcrypt 方法加密之后存入数据库。
class User extends Model { public function setPasswordAttribute($password) { $this->attributes['password'] = bcrypt($password); }}
上述方法调用模型的 $attributes 属性,并使用自定义方法改写,在使用 ->password 属性进行赋值后,就会调用该方法的代码并执行。
我们仍然在 tinker 内进行演示:
$user = new User;$user->password = 'blah';echo $user->password;// 输出 $2y$10$e3ufaNvBFWM/SeFc4ZyAhe8u5UR/K0ZUc5IjCPUvOYv6IVuk7Be7q
自定义方法
框架独立出来模型这个数据库操作层的目的,就是为了把数据操作全部集中到模型内完成,以便可以全局统一,规范地编写代码。
下面举个例子,说明一下哪些逻辑应该放在模型层操作。比如有一个视图文件内的一个展示片段:
@if ($event->started_at->isToday()) This event is occurring today!@endif
其中 $event 是模型 Event 对象的一个实例,start_at 方法是模型的一个属性,也是数据库表的一个字段。按照之前章节的介绍,我们对其使用了访问器的方法,自动在读取的时候使用 Carbon 类返回一个实例化对象。所以上面的代码片段可以使用 isToday() 这个 Carbon 类的方法。
但是在模型层面进行类库方法的调用,有些单独,且零散。假如有些API接口要使用此方法格式化,或者别的页面也要重用这个方法,显然放在模型内更为合适。
考虑在模型内添加以下代码:
class Event extends Model { public function occurringToday() { return $this->started_at->isToday(); }}
声明一个public的公开访问的私有化方法,并操作对象的实例 $this的属性和方法。
那么上述的blade模板内的代码就可以更换如下:
@if ($event->occurringToday()) This event is occurring today!@endif
这样逻辑摘出来就清楚的多了。而且可维护性更强。为什么?因为假如后期我们业务出现变动,不再使用 start_at 字段进行判断,可以很容易地通过修改 occurringToday 方法而达成全局生效的目的。
这样的程序就很灵活了。
写在最后
本文描述了laravel模型内很常用的两个小技巧。
一个是修改器,让你不必每次在写入数据的时候,考虑如何转换,如何判断,不再写重复的啰嗦的代码;
一个是如何优化视图文件,以及如何权衡设计技巧,让模型做模型应该做的事情,尽量在代码内把职责划分清楚。
规范的设计,能让一个项目的代码更为健壮。
以上就是分享Laravel模型使用的2个小技巧的详细内容,更多请关注自由互联其它相关文章!
本文共计1405个文字,预计阅读时间需要6分钟。
下面是由Laravel教程栏目为初学者整理的Laravel模型使用技巧,希望对需要的朋友有所帮助!
引言:本文将介绍Laravel模型的一些修改器和职责。
修改器:模型修改器是用于在模型保存之前或之后修改属性值的方法。例如,可以创建一个修改器来自动生成模型的唯一标识符。
职责:模型职责是指将模型的行为和逻辑与数据库操作分离。例如,可以将模型的创建、更新和删除逻辑放在不同的方法中。
修改器示例:phpclass User extends Model{ protected static function boot() { parent::boot();
static::creating(function ($user) { $user->unique_identifier=Str::uuid(); }); }}
模型职责示例:phpclass User extends Model{ public function save(array $options=[]) { if ($this->isDirty('email')) { $this->sendEmailConfirmation(); }
return parent::save($options); }
protected function sendEmailConfirmation() { // 发送邮件确认逻辑 }}
使用方法:使用模型修改器和职责的方法如下:
1. 创建一个模型修改器,在模型类中使用`protected static function boot()`方法注册。
2.在模型中定义职责方法,并在保存模型时调用这些方法。
例如,使用表单单例获取用户:
php$user=User::find(1);$user->form();这样,Laravel模型的使用就变得更加灵活和高效。
下面由Laravel教程栏目给大家分享Laravel模型使用的2个小技巧 ,希望对需要的朋友有所帮助!
引言
本文说说模型的修改器,以及模型的职责。
修改器
有没有这样一种用法:使用表单获取一个字段的输入,使用加密算法,或者摘要方式对字段处理后存入数据库,
这在数据库密码字段是常用的处理手段。
如果写操作在程序内到处都是,零散地分布在业务代码的各个地方,我们总不至于每次都要写一次相同的代码吧?
相同的业务逻辑,提取出来,抽象出来,只写一次,这才是高效代码的王道。
laravel这个注重设计模式的现代化框架,自然是不会做无用功。于是对应读取器,就有了修改器,专门用于写入数据库时起作用。
比如对于写操作,某个字段的值写入,默认使用 bcrypt 方法加密之后存入数据库。
class User extends Model { public function setPasswordAttribute($password) { $this->attributes['password'] = bcrypt($password); }}
上述方法调用模型的 $attributes 属性,并使用自定义方法改写,在使用 ->password 属性进行赋值后,就会调用该方法的代码并执行。
我们仍然在 tinker 内进行演示:
$user = new User;$user->password = 'blah';echo $user->password;// 输出 $2y$10$e3ufaNvBFWM/SeFc4ZyAhe8u5UR/K0ZUc5IjCPUvOYv6IVuk7Be7q
自定义方法
框架独立出来模型这个数据库操作层的目的,就是为了把数据操作全部集中到模型内完成,以便可以全局统一,规范地编写代码。
下面举个例子,说明一下哪些逻辑应该放在模型层操作。比如有一个视图文件内的一个展示片段:
@if ($event->started_at->isToday()) This event is occurring today!@endif
其中 $event 是模型 Event 对象的一个实例,start_at 方法是模型的一个属性,也是数据库表的一个字段。按照之前章节的介绍,我们对其使用了访问器的方法,自动在读取的时候使用 Carbon 类返回一个实例化对象。所以上面的代码片段可以使用 isToday() 这个 Carbon 类的方法。
但是在模型层面进行类库方法的调用,有些单独,且零散。假如有些API接口要使用此方法格式化,或者别的页面也要重用这个方法,显然放在模型内更为合适。
考虑在模型内添加以下代码:
class Event extends Model { public function occurringToday() { return $this->started_at->isToday(); }}
声明一个public的公开访问的私有化方法,并操作对象的实例 $this的属性和方法。
那么上述的blade模板内的代码就可以更换如下:
@if ($event->occurringToday()) This event is occurring today!@endif
这样逻辑摘出来就清楚的多了。而且可维护性更强。为什么?因为假如后期我们业务出现变动,不再使用 start_at 字段进行判断,可以很容易地通过修改 occurringToday 方法而达成全局生效的目的。
这样的程序就很灵活了。
写在最后
本文描述了laravel模型内很常用的两个小技巧。
一个是修改器,让你不必每次在写入数据的时候,考虑如何转换,如何判断,不再写重复的啰嗦的代码;
一个是如何优化视图文件,以及如何权衡设计技巧,让模型做模型应该做的事情,尽量在代码内把职责划分清楚。
规范的设计,能让一个项目的代码更为健壮。
以上就是分享Laravel模型使用的2个小技巧的详细内容,更多请关注自由互联其它相关文章!

