Lavarel Eloquent小技巧

获取原始属性

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

$user = App\User::first();

$user->name;            // John

$user->name = "Peter";       // Peter

$user->getOriginal('name');      // John
$user->getOriginal();                // 原始 $user 记录

检查模型是否被修改

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

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

$user->name = "Peter";
$user->isDirty();              // true

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

获取更改的属性

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

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

定义 deleted_at 字段

默认 Lavarel 使用 deleted_at 字段处理软删除,我们可以通过定义 DELETED_AT 属性来更改它。

class User extends Model
{
	use SoftDeletes;
	const DELETED_AT = 'is_deleted';
}

保存模型和关系

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

class User extends Model
{
	public function phone(){
		return $this->hasOne('App\Phone');
	}
}

$user = User::first();
$user->name = "Peter";
$user->phone->number = '13588745874';

$user->push();   // 这将更新数据库中的用户和电话

重新加载模型

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

$user = App\User::first();
$user->name;           // John

// user 表被其他进程修改了,例如:数据库中又插入了一条"name"为"Peter"的数据

$updateUser = $user->fresh();
$updateUser->name;            // Peter

$user->name;                 // John

重新加载现有模型

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

$user = App\User::first();
$user->name;            // John

// user  表被其他进程修改,例如:"name" 被修改为"Peter"

$user->refresh();
$user->name;                    // Peter

检查模型是否为同一个

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

$user = App\User::find(1);
$sameUser = App\User::find(1);
$diffUser = App\User::find(2);

$user->is($sameUser);            // true
$user->is($diffUser);                // false

克隆一个模型

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

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

$newUser->save();

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

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

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

指定id排序

User::query()->orderByRaw('ORDER BY FIELD(id,11,2,5)')->get();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值