宁泽林_NiZerin - 互联网技术博客

  • PHP
  • Go
  • Java
  • Rust
  • Python
  • 交流群
  • 关于我
  • 留言版
  1. 首页
  2. Laravel
  3. 正文

[译] 10 个你可能不知道的 Laravel Eloquent 小技巧

2019年1月22日 8399点热度 0人点赞 22条评论

Laravel 是一个功能丰富的框架。但是,你无法从官方文档中找到所有可用的功能。以下是一些你可能不知道的功能。

1.获取原始属性

当修改一条 Eloquent 模型记录的时候你可以通过调用 getOriginal() 方法获取记录的原始属性

$user = App\User::first();
$user->name;                   //John
$user->name = "Peter";         //Peter
$user->getOriginal('name');    //John
$user->getOriginal();          //原始 $user 记录

2. 检查模型是否被修改

使用 isDirty() 方法确定模型或给定属性是否已被修改

$user = App\User::first();
$user->isDirty();          //false
$user->name = "Peter";
$user->isDirty();          //true

也可以检查指定属性是否被修改。

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

3. 获取更改的属性

使用 getChanges() 获取更改的属性

$user->getChanges()
//[
     "name" => "Peter",
  ]

注:仅当您使用  syncChanges() 保存模型或同步更新时,才生效

4. 定义 deleted_at 字段

默认情况下,Laravel使用deleted_at字段处理软删除。 您可以通过定义DELETED_AT属性来更改它。

class User extends Model
{
    use SoftDeletes;
     * The name of the "deleted at" column.
     *
     * @var string
     */
    const DELETED_AT = 'is_deleted';
}

或者定义访问

class User extends Model
{
    use SoftDeletes;
    public function getDeletedAtColumn()
    {
        return 'is_deleted';
    }
}

5. 保存模型和关系

您可以使用push()方法保存模型及其关联。

class User extends Model
{
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}
$user = User::first();
$user->name = "Peter";
$user->phone->number = '1234567890';
$user->push(); // 这将更新数据库中的用户和电话

6. 重新加载模型

使用 fresh() 重新从数据库加载一个模型。

$user = App\User::first();
$user->name;               // John
// user 表被其他进程修改。 例:数据库又插入一条 “name” 为 “Peter” 的数据。
$updatedUser = $user->fresh();
$updatedUser->name;       // Peter
$user->name;              // John

7. 重新加载现有模型

你可以使用 refresh() 方法从数据库重新加载具有新值的现有模型。

$user = App\User::first();
$user->name;               // John
// user 表被其他进程修改。例: “name” 被修改为 “Peter” 。
$user->refresh();
$user->name;              // Peter

注: refresh() 也会更新模型的关联模型数据。

8. 检查模型是否为同一个

使用 is() 方法确定两个模型是否拥有相同主键并且属于同一张表。

$user = App\User::find(1);
$sameUser = App\User::find(1);
$diffUser = App\User::find(2);
$user->is($sameUser);       // true
$user->is($diffUser);       // false

9. 克隆一个模型

你可以使用 replicate() 方法来复制一个模型到一个新的对象中。

$user = App\User::find(1);
$newUser = $user->replicate();
$newUser->save();

10. 在 find() 方法中指定查找的属性

当使用 find() 或 findOrFail() 方法时,传入第二个参数可以指定需要查找的属性。

$user = App\User::find(1, ['name', 'age']);
$user = App\User::findOrFail(1, ['name', 'age']);

如果你发现这篇文章有帮助,通过点赞来表达你的喜欢。也很乐意听到你对此的看法和想法。你可以在 Twitter 上找到我。

原文地址:https://medium.com/@JinoAntony/10-hidden...

译文地址:https://laravel-china.org/topics/22639


本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: laravel php translations
最后更新:2019年1月22日

NiZerin

博主已经躺平了,后面很少会更新博客。

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • 素笺墨韵

    11

    2019年1月23日
    回复
    • 素笺墨韵

      @素笺墨韵 。

      2019年1月23日
      回复
      • 林老师带你学编程

        @素笺墨韵 3333

        2019年3月14日
        回复
    • I'M LZQ

      @素笺墨韵 222

      2019年3月14日
      回复
      • 林老师带你学编程

        @I'M LZQ 333

        2019年3月14日
        回复
        • 林老师带你学编程

          @林老师带你学编程 44444

          2019年3月14日
          回复
  • I'M LZQ

    222

    2019年3月14日
    回复
    • I'M LZQ

      @I'M LZQ 3333

      2019年3月14日
      回复
  • I'M LZQ

    3333

    2019年3月14日
    回复
    • I'M LZQ

      @I'M LZQ 44444

      2019年3月14日
      回复
      • 林老师带你学编程

        @I'M LZQ 5555

        2019年3月14日
        回复
        • 林老师带你学编程

          @林老师带你学编程 6666

          2019年3月14日
          回复
          • 林老师带你学编程

            @林老师带你学编程 77777

            2019年3月14日
          • 林老师带你学编程

            @林老师带你学编程 666777

            2019年3月14日
  • 林老师带你学编程

    我是一级评论

    2019年3月14日
    回复
    • 林老师带你学编程

      @林老师带你学编程 我是回复一级评论的,二级评论

      2019年3月14日
      回复
      • I'M LZQ

        @林老师带你学编程 我是回复二级评论的三级评论

        2019年3月14日
        回复
        • I'M LZQ

          @I'M LZQ 我是回复三级评论的四级评论

          2019年3月14日
          回复
          • I'M LZQ

            @I'M LZQ 我是回复四级评论的五级评论

            2019年3月14日
        • I'M LZQ

          @I'M LZQ 我是回复二级的第二个三级评论

          2019年3月14日
          回复
    • I'M LZQ

      @林老师带你学编程 2222

      2019年3月14日
      回复
  • 2H

    哇哦!

    2019年5月12日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    分类
    • Angular
    • CSS3
    • docker
    • Flutter
    • git
    • Go
    • H5
    • Java
    • JavaScript
    • Laravel
    • linux
    • Node.js
    • PHP
    • Python
    • React
    • redis
    • Vue.js
    • windows
    • WordPress
    • 交流
    • 小程序
    • 工具
    • 网站公告
    标签聚合
    php wordpress translations javascript vue flutter laravel go
    友情链接
    • PHP函数字典
    • 宝塔运维特惠
    • 科学上网
    • 阿里云特惠

    COPYRIGHT © 2021 nizer.in. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang