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']);

你可能感兴趣的:(laravel)