Laravel 模型默认的有 created_at
和 updated_at
名字的时间戳字段,这里,你可以通过定义属性来覆盖它们。
class User extends Model
{
const CREATED_AT = 'created';
const UPDATED_AT = 'last_update';
const DELETED_AT = 'removed';
}
exists
属性可以检测当前模型的记录是否在数据库中存在。
$user = new User;
$user->name = 'George';
$user->email = 'george@example.com';
$user->password = 'secret';
$user->exists; // false
$user->save();
$user->exists; // true
你可以使用 isDirty()
方法来检测某个模型的的属性是否发生了改变,另外你可以通过 getDirty()
方法来获取到发生改变的属性和它改变的值。
$user = User::first();
$user->isDirty(); // false
$user->name = 'James';
$user->isDirty(); // true
$user->isDirty('email'); // false
$user->isDirty('name'); // true
$user->getDirty(); // ["name" => "James"]
在开发中,我们可能在改变模型值之后,又想获取到该模型的原始值,那么我们就可以通过 getOriginal()
方法啦。
$user = User::first();
$user->name = 'James';
$user->getOriginal(); // Array with "name" => "George"
$user->getOriginal('name'); // "George"
$user = User::first();
$clonedUser = $user->replicate();
// Convert a model instance to an array
$user = User::first();
$user->toArray();
// Convert a collection to an array
$users = User::all();
$users->toArray();
我们可以调用 refresh()
方法获取该模型在数据库中最新的值。
$user= User::where('name', 'George')->first();
$user->name= 'James';
$user->address->city = "New York";
$user->refresh();
$user->name; // "George"
$user->address->city; // "Washington"
Laravel 默认有需要模型事件,如: creating
, created
, saved
等,下面的方法可以直接跳过这些事件:
$user = User::withoutEvents(function () {
return factory(User::class)->create();
});
下面是更新关联数据:
$user = User::where('name', 'George')->first();
$user->age = 42;
$user->address->city = "New York";
如果仅仅是调用
$user->save();
那么关联数据的变动是不会保存的。这个时候我们可以:
$user->push();
如果我们使用了软删除,那么该如何从数据库中彻底的删除这条数据呢?可以这样:
$user = User::first();
$user->forceDelete();
你知道几条?
转载自:https://medium.com/swlh/10-eloquent-features-that-you-might-not-know-about-75d8221d4adc
朋友会在“发现-看一看”看到你“在看”的内容