当前位置: 代码网 > it编程>编程语言>Php > Laravel Eloquent的九个实用特性详解

Laravel Eloquent的九个实用特性详解

2024年05月18日 Php 我要评论
正文对于使用 laravel 的开发者来说,可能都会惊叹于 eloquent model 的强大,但是在强大的表面之下,其实还是有很多鲜为人知的特性的,本文即来分享十个 laravel eloquen

正文

对于使用 laravel 的开发者来说,可能都会惊叹于 eloquent model 的强大,但是在强大的表面之下,其实还是有很多鲜为人知的特性的,本文即来分享十个 laravel eloquent 的强大特性。

1.更强大的 find() 方法

很多开发者在使用 find() 方法的时候,通常就只是在这里传入一个 id 的参数,其实我们也是可以传入第二个参数的:在 find() 方法中指定需要查找的字段

$user = app\user::find(1, ['name', 'age']);
$user = app\user::findorfail(1, ['name', 'age']);
// 这里面的 name 和 age 字段就是制定只查找这两个字段

2.克隆 model

直接使用 replicate() 方法即可,这样我们就很容易地创建一个 model 的副本:

$user = app\user::find(1);
$newuser = $user->replicate();
$newuser->save();
// 这样,$newuser 和 $user 的基本数据就是一样的

3.检查 model 是否相同

使用 is() 方法检查两个 model 的 id 是否一致,是否在同一个表中:

$user = app\user::find(1);
$sameuser = app\user::find(1);
$diffuser = app\user::find(2);
$user->is($sameuser);       // true
$user->is($diffuser);       // false

4.在关联模型中同时保存数据

使用 push() 你可以在保存模型数据的同时,将所关联的数据也保存下来:

class user extends model
{
    public function phone()
    {
        return $this->hasone('app\phone');
    }
}
$user = user::first();
$user->name = "geixue";
$user->phone->number = '1234567890';
$user->push(); 
// 最后这一行 push() 会将 user 的数据和 phone 的数据同时更新到数据库中

5.自定义 deleted_at 字段

如果你使用过 laravel 的软删除 soft delete 的话,你应该就知道其实 laravel 在标记一个记录为已删除的状态其实是用 deleted_at 这个字段来维护的,其实你是可以自定义这个字段的:

class user extends model
{
    use softdeletes;
     * the name of the "deleted at" column.
     *
     * @var string
     */
    const deleted_at = 'deleted_date';
}

或者你这样自定义也可以:

class user extends model
{
    use softdeletes;
    public function getdeletedatcolumn()
    {
        return 'deleted_date';
    }
}

6.获取已修改的 model 属性

使用 getchanges() 方法获取已被修改的属性:

$user->getchanges()
//[
     "name" => "geixue",
  ]

7.检查 model 是否被修改

使用 isdirty() 方法就可以检测模型中的数据是否被修改:

$user = app\user::first();
$user->isdirty();          //false
$user->name = "geixue";
$user->isdirty();          //true

在使用 isdirty() 的时候,你也可以直接检测某个属性是否被修改:

$user->isdirty('name');    //true
$user->isdirty('age');     //false

8.获取 model 的原始数据

在给 model 的属性赋予新值的时候,你可以通过 getoriginal() 来获取原来的值:

$user = app\user::first();
$user->name;                   //jellybool
$user->name = "geixue";         //geixue
$user->getoriginal('name');    //jellybool
$user->getoriginal();          //original $user record

9.刷新 model 的数据

使用 refresh() 刷新 model 的数据,这在你使用 tinker 的时候特别有用:

$user = app\user::first();
$user->name;               // jellybool
// 这个时候在其他地方,该用户的名字被更新为 geixue,你可以使用 refresh 来刷新,而不用退出 tinker
$user->refresh(); 
$user->name;              // geixue

最后

上面的九个 eloquent 特性其实在特定的应用场景是非常有用的,希望能在你开发 laravel 项目的时候帮到你一点点。happy hacking

以上就是laravel eloquent的九个实用特性详解的详细内容,更多关于laravel eloquent特性的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com