首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel Eloquent 模型类zhon设置访问器和修改器

在讲访问器和修改器之前,我们先来看一个例子,在带有用户功能系统,除了用户注册时使用用户名之外,我们有时候还允许用户设置昵称,这个昵称是可选,我们在页面上显示用户名时,会优先展示用户昵称,如果该用户没有设置昵称...所以,今天我们要介绍访问器可以一劳永逸解决这个问题。 访问器 访问器用于从数据库获取对应字段值后进行一定处理满足指定需求再返回给调用方。 要定义访问器很简单,在相应模型设置对应方法即可。...注:访问器方法名包含字段尽量不要和数据库字段名同名,否则会覆盖数据库字段,导致通过模型属性将永远无法访问该数据库字段;另外,如果访问器内部访问了某个数据库字段,则不能将访问器和该数据库字段同名,否则会导致循环引用而报错...比如此例,就不能将访问器方法名设置 getNameAttribute getNickNameAttribute。...我们当然可以通过上述访问器和修改器完成这种操作,但是 Laravel 提供了更加快捷方法,对于一个在数据库类型 JSON TEXT 字段,我们可以在模型类中将字段对应属性类型转化设置数组,

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

路由使用进阶(二)

{task},然后默认以参数值作为资源 ID 在底层通过 Eloquent 查询获取对应模型实例,并将结果传递到闭包函数控制器方法。...,以后每次访问包含 {task_model} 参数路由时,路由解析器都会从请求 URL 解析出模型 ID ,然后从对应模型类 Task 获取相应模型实例并传递给闭包函数控制器方法: Route...如果你觉得这种静态设置频率方式不够灵活,还可以通过模型属性来动态设置频率,例如,我们可以为上述通过 throttle 中间件进行分组路由涉及到模型类定义一个 rate_limit 属性,然后这样来动态定义这个路由...rate_limit 属性值 }); Route::get('/post', function () { // 在 Post 模型设置自定义 rate_limit...属性值 }); }); 这样,我们就可以通过为不同模型设置不同 rate_limit 属性值来达到动态设置频率限制效果了。

8.5K40

Laravel Eloquent 模型关联关系(下)

注:实际开发为了提高查询性能,我们往往是在 posts 表冗余提供一个 comments_count 字段,每新增一条评论,该字段值加 1,查询时候直接取该字段即可,从而提高查询性能。...还可以通过 saveMany 方法一次插入多条关联记录,前提是关联模型配置了批量赋值,比如我们 Comment 模型类配置白名单 $fillable 属性如下(你也可以不配置批量赋值,但是需要多次实例化并逐个设置评论模型属性值...如果是要更新新创建模型实例所属模型(父模型外键字段,比如以 posts 表例,新增记录想要更新 user_id 字段,可以这么实现: $user = User::findOrFail(1);...前提是 user_id 允许 null,否则会抛出异常。 空对象模型 如果外键字段 user_id 允许空的话,当我们访问 Post 模型 author 属性时,默认返回 null。...Eloquent 提供了这种同步机制帮助我们更新子模型时触发父模型更新时间 updated_at 字段值更新,要让该机制生效,需要在子模型配置 $touches 属性: // 要触发更新父级关联关系

19.5K30

Laravel 表单方法伪造与 CSRF 攻击防护

答案是通过表单方法伪造,下面我们就来介绍如何在 Laravel 中进行表单方法伪造。...表单请求方法伪造 要告知 Laravel 当前提交表单使用是 GET/POST 之外其他请求方式,需要在表单添加一个名为 _method 隐藏字段字段值是「PUT」、「DELETE」 「PATCH...>" id="csrf-token"> 然后我们在 JavaScript 脚本中将这个 Token 值放到一个全局请求头设置,以便每个 HTTP 请求都会带上这个头信息,避免每次发起请求都要添加这个字段...注:如果你使用了 Laravel 自带 assets/js/bootstrap.js, 则上述 Vue 请求头设置不需要自己编写,因为 bootstrap.js 已经包含了这个逻辑。...排除指定 URL 不做 CSRF 保护 对于应用某些第三方回调路由,第三方登录支付回调,无法做 Token 校验,需要将这些授信路由排除在 CSRF 校验之外,这个功能可以参考官方文档实现,很简单

8.7K40

Laravel学习记录--Model

'//指定主键 laravel默认添加数据库时,会 增加两个字段 create_at ,update_at 如不需要这两个字段,除在迁移文件删除之外 还需在model类设置属性 public $timestamps...name构建关联字段(如果nametest,此字段test_type)id :存放关联id(文章视频)如不指定结合name构建关联字段(如果nametest,此字段test_id)ownerKey...test,此字段test_type)id:存放关联id(文章视频)如不指定结合name构建关联字段(如果nametest,此字段test_id)ownerKey:当前模型主键ID public...Eloquent提供了便捷方法将新模型增加至关联,如你需要为一个Muser模型插入一个新Phone,这时你无须Phone手动设置musers属性,直接在关联上使用save方法插入Phone即可...null,前提是uid字段允许空,如果不允许空会抛出异常 空对象模型 如果外键字段uid允许空,当我们访问Phone模型muser属性(注意这里是属性,而不是方法)时,默认返回null,Eloquent

13.4K20

【说站】laravel模型$casts属性转换

update; 想想都觉得麻烦,虽然可以使用laravel模型事件,在对应creatingupdating事件中去处理,但这也太大材小用了。..., 例如设置表名table,是否维护时间戳timestamps,可被批量赋值属性fillable,主键字段名(默认id)primaryKey,主键字段类型(默认int)keyType,主键是否自增(默认是...)incrementing,等等,这里主要说属性转换casts,在模型设置一下即可: PHP /**  * 类型转换  * @var string[]  */protected $casts = ...[     'recharge => 'array',]; 设置过后,从前端拿到或者处理出来字段array数据,就不需要手动去json_encode,update时候也不要管,会自动帮我们转为json...可参考:laravel模型事件-update触发updating和updated问题 先使用first或者find获取模型后再操作即可,当然,updateOrCreate也可以。。

1.6K10

Laravel API教程:如何构建和测试RESTful API

您可以将资源表示在多个数据模型根本不在数据库中表示),并且模型完全不受用户限制。最后,您将以适合您应用程序方式来决定如何构建资源和模型。...$table->timestamps() 将会为我们生成时间戳——在created_at和updated_at时,但是不用担心设置一个默认Laravel将在需要时更新这些字段。...现在让我们回到我们模型,并将这些属性添加到$fillable字段,以便我们可以在我们Article::create和Article::update模型中使用它们: class Article extends...Laravel带有Faker,一个伟大我们生成正确虚拟数据格式库。...在我们config/database.php文件,我们需要database将sqlite配置字段设置:memory:: ...

20.2K20

何在Laravel5.8正确地应用Repository设计模式

在本文中,我会向你展示如何在 Laravel 从头开始实现 repository 设计模式。我将使用 Laravel 5.8.3 版,但 Laravel 版本不是最重要。...这意味着你业务逻辑不需要了解如何检索数据数据源是什么,业务逻辑依赖于 repository 来检索正确数据。 关于这个模式,我看到有人将它误解 repository 被用来创建更新数据。...现在我们已经创建好了一个新 Laravel 项目,接下来应该为它创建一个控制器和模型。...除了默认 Laravel 时间戳字段外,我们博客只需要 标题、内容 和 用户 ID 字段。 <?...不需要十行代码就可以获取到所需数据,多亏了 repository ,所有这些逻辑都可以在一行代码完成。这对单元测试也很好,因为 repository 方法很容易复用。

4.2K31

Laravel学习笔记(四)——模型,更安全数据存取

而在Laravel模型就相当于一个功能完善数据库Helper类,不需要用户自己写,只要掌握基本用法就能很快速方便对数据库进行操作,哪怕你一点不懂SQL语句。...看了接下来Laravel模型使用之后你就会爱上LaravelEloquent ORM模型,这也是我直接介绍模型而不讲解其他数据库操作原因。...Laravel 数据库配置 要想使用模型,第一个要设置的当然是数据库信息。...如果你不需要这两个字段,则需要在模型内将 $timestamps 属性设置 false 模型获取 要对数据进行操作第一步是获取操作对象。...-- 用 -> 后面接属性名即可访问到对应值 --> {{ $student -> info }} @stop 模型操作 获取对象后只需要简单几行语句即可对数据库进行操作

2K00

Laravel学习笔记(四)——模型,更安全数据存取

而在Laravel模型就相当于一个功能完善数据库Helper类,不需要用户自己写,只要掌握基本用法就能很快速方便对数据库进行操作,哪怕你一点不懂SQL语句。...看了接下来Laravel模型使用之后你就会爱上LaravelEloquent ORM模型,这也是我直接介绍模型而不讲解其他数据库操作原因。...Laravel 数据库配置 要想使用模型,第一个要设置的当然是数据库信息。...如果你不需要这两个字段,则需要在模型内将 $timestamps 属性设置 false 模型获取 要对数据进行操作第一步是获取操作对象。...-- 用 -> 后面接属性名即可访问到对应值 --> {{ $student -> info }} @stop 模型操作 获取对象后只需要简单几行语句即可对数据库进行操作

1.7K00

推荐17-Laravel 中使用 JWT 认证 Restful API

设置路由 开始之前,我们将为所有本教程讨论设置路由。打开 routes/api.php 并将下面的路由复制到您文件。...如果 loginAfterSignUp 属性 true ,则注册后通过调用 login 方法用户登录。否则,成功响应则将伴随用户数据一起返回。...在 getAuthUser 方法,验证请求是否包含令牌字段。然后调用 authenticate 方法,该方法返回经过身份验证用户。最后,返回带有用户响应。 身份验证部分现在已经完成。...index , 经过身份认证用户获取所有产品列表 show , 根据 ID 获取特定产品 store , 将新产品存储到产品列表 update , 根据 ID 更新产品详情 destroy ,...根据 ID 从列表删除产品 添加一个构造函数来获取经过身份认证用户,并将其保存在 user 属性

10.9K20

通过 Laravel Eloquent 模型实现批量赋值和软删除

每次这么做得崩溃掉,到时候我们控制器类里面可能会遍布这种设置代码,Laravel 号称优雅就是打脸了。所以这个时候,批量赋值就粉墨登场了,批量赋值就是我们解决这个问题。...作为一个成熟 ORM 框架,Eloquent 在设计之初肯定不会没有考虑到这样问题,实际上,我们可以借助模型白名单属性黑名单属性来解决这个困扰。...所以,以 Post 模型例,我们需要为其设置一个黑名单字段: protected $guarded = ['user_id']; 白名单和黑名单都是以数组属性,支持设置多个字段。...实现原理 Eloquent 模型我们提供了「软删除」功能支持。这就意味着,在 Laravel ,我们不需要编写任何额外代码就可以实现对数据库记录「软删除」。...该字段默认值 NULL,表示没有被软删除。如果要在模型类中支持软删除,需要在对应模型类(在本例是 Post 模型添加支持软删除 Trait: <?

2.3K10

基于 Redis + 资源库模式实现 Laravel 应用缓存功能

今天学院君来给大家演示如何在 Laravel 项目中基于 Redis 实现应用缓存功能,这想必也是很多人日常使用 Redis 最多业务场景,这里缓存指的是将数据库查询结果存储到 Redis,其目的是将数据加载从磁盘...,我们引入了 Post 模型实例作为底层数据源,接下来,就可以编写一个基于主键 ID 获取单篇文章数据 getById 方法,以及基于多个文章 ID 获取多篇文章数据 getByManyId 方法了...我们再来看热门文章排行榜: 查询记录空,模型实例数量也空,说明成功命中了缓存。...$this->unserialize($value) : null; } ... /** * 设置带有过期时间缓存项 * * @param string $key * @param...连接实例上 get 和 setex 方法获取设置缓存,如果是缓存项是对象的话,还会进行序列化和反序列化操作。

2.5K10

通过 Request 对象实例获取用户请求数据

而作为最流行 PHP 框架,Laravel 自然也是处理用户请求提供了丰富工具集,从收集、验证、到过滤、编排,可谓是一应俱全,接下来,我们将通过三四篇教程篇幅来你详细介绍如何在 Laravel...只获取部分请求数据 如果只想获取部分请求数据,可以通过 $request 实例上 except only 方法,这两个方法是相反,一个用于排除指定字段,一个用于获取指定字段: $request-...('name'); 我们还可以为 input 方法传递第二个参数作为默认值,如果请求字段空的话,则使用该默认值: $site = $request->input('site', 'Laravel学院...'); 获取数组输入字段值 有的时候,我们在表单传递给后端可能是一个数组,比如一些复选框选中项,这些表单输入框 name 值通常是 name[], books[],这个时候传递到后端 books...注:需要注意是,如果发起 POST 请求提交 JSON 格式请求数据时,请求头没有设置 application/json 的话,request->input() 方法将不会以 JSON 格式解析数据

19.7K30

使用Entrust扩展包在laravel 实现RBAC功能

EntrustPermission::class, 'ability' = \Zizaco\Entrust\Middleware\EntrustAbility::class, ②配置 在配置文件config/auth.php设置合适值...—— 该角色详细描述 display_name 和description 属性都是可选,在数据库相应字段默认为空。...:在User模型添加roles() 、hasRole(name) 、can(permission) 以及ability(roles,permissions, 软删除 使用Entrust提供迁移命令生成关联关系表默认使用了...不过,由于Laravel事件监听器局限性,所以暂时无法区分是调用delete() 还是forceDelete() ,基于这个原因,在你删除一个模型之前,必须手动删除所有关联数据(除非你数据表使用了级联删除...实现RBAC功能文章就介绍到这了,更多相关Entrust扩展包实现RBAC内容请搜索ZaLou.Cn以前文章继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

6.1K10

laravel-nestedset:多级无限分类正确姿势

嵌套集合模型 安装要求 PHP>=5.4 laravel>=4.1 v4.3版本以后支持Laravel-5.5 v4版本支持Laravel-5.2、5.3、5.4 v3版本支持Laravel-5.1 v2...('_rgt'); 设置好你模型后你只需要修复你结构树来填充_lft和_rgt字段: MyModel::fixTree(); 关系 Node具有以下功能,他们功能完全且被预加载: Node belongs...(); // save一个根节点(root) 在这里node被设置root,意味着它没有父节点 将一个已存在node设置root // #1 隐性 save $node->saveAsRoot(...对应父节点不存在节点数量 修复树 从v3.1往后支持修复树,通过parent_id字段继承信息,给每个node设置合适lft 和 rgt值 Node::fixTree(); 作用域(scope...MenuItems有menu_id属性并实现nested sets模型。显然你想基于menu_id属性来单独处理每个树,为了实现这样功能,我们需要指定这个menu_id属性scope属性

3.4K20
领券