10 个 Laravel Eloquent 中的隐藏特性你知道几个
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. 获取改变的属性
获取模型中发生了变化的属性
$user->getChanges()
//[
"name" => "Peter",
]
注意:仅当您使用 syncChanges()保存模型或同步更改时,更改才会显示。
4. 自定义 deleted_at 列
默认情况下,Laravel 使用 deleted_at 列来处理软删除。 您可以通过明确定义 DELETED_AT 属性来更改此设置。
class User extends Model
{
use SoftDeletes;
* 定义 "deleted at" 列的名字.
*
* @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
// 用户记录通过另一个线程更新了。 例如: 'name' 改成了 // Peter。
$updatedUser = $user->fresh();
$updatedUser->name; // Peter
$user->name; // John
7. 重新加载现有模型
你可以使用 refresh () 从数据库中的新值来重新加载现有模型。
$user = App\User::first();
$user->name; // John
// 用户记录通过另一个线程更新了。 例如: 'name' 改成了 // Peter。
$user->refresh();
$user->name; // Peter
注意: refresh () 还将更新现有模型的加载关系。
8. 检查模型是否相同
使用 is () 判定两个模型是否有相同的 ID 并且属于同一张表。
$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']);
怎么样,以上 10 个 Laravel Eloquent 中的隐藏特性你知道几个呢?希望对你们有帮助!
————————————————
原文作者:leienshu
转自链接:https://learnku.com/articles/22844
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。