首页 > 其他分享 >10 个 Laravel Eloquent 中的隐藏特性你知道几个

10 个 Laravel Eloquent 中的隐藏特性你知道几个

时间:2024-04-04 16:44:52浏览次数:18  
标签:Laravel 10 name App Eloquent User Peter 模型 user

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
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。

标签:Laravel,10,name,App,Eloquent,User,Peter,模型,user
From: https://www.cnblogs.com/mouseleo/p/18114310

相关文章

  • 【小迪安全2023】第9天:信息打点-CDN绕过篇&漏洞回链&接口探针&全网扫描&反向邮件;第10
    ......
  • 【如今IP训练营】招募,复制我的赚钱模式,小白也能月入10万+
    标题小插曲:大家好,我是如今,【如今笔记】的主理人。做“IP训练营”,我现在每月的收益在10万以上,在取这篇文章标题的时候,最后一句最初定的是“小白也能年入100万”,因为我理所当然的认为月入10万,一年肯定就是100万+,后面发现不能这么计算,因为我是从去年底开始做“IP训练营”的,只有3......
  • luoguP1102-双指针
    题目链接:P1102A-B数对-洛谷|计算机科学教育新生态(luogu.com.cn)利用单调性求解双指针解法:排序构造出区间单调,则若存在目标值B,B在序列中一定为连续区间,此时通过双指针l和r,此时维护一段区间:有S[L]大于S[I]-C,S[R]大于等于S[I]-C,此时我们枚举每一位,若存在A......
  • 洛谷p1002(过河卒)
    题目描述 如图,A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如下图C点上的马可以控制9个点(图中的P1,P2…P8和C)。卒不能通过对方马的控......
  • 洛谷 P1004 [NOIP2000 提高组] 方格取数
    题意:n*n的方格,从左上角到右下角两次。每一次经过的路径中,如果有数字,数字都会变成0并计数。求两次路径的最大计数。思路:线性dp,从左上角到右下角步数固定为2*n-2步。初始时0步dp[0][1][1]=grid[1][1],知道了x1和x2可以确定对应的y,可以直接进行状态转移。可以增加剪枝:x<=m......
  • ctfshow--web10
    dirsearch没有扫到文件查看源代码发现有个style.css文件点击查看查看index.phps代码又是代码审计点击查看代码<?php $flag="";functionreplaceSpecialChar($strParam){$regex="/(select|from|where|join|sleep|and|\s|union|,)/i";......
  • 挑战程序设计竞赛 2.6章习题 UVA - 10006 Carmichael Numbers
    https://vjudge.csgrandeur.cn/problem/UVA-10006当今计算机科学的一个重要的领域就是密码学。有些人甚至认为密码学是计算机科学中唯一重要的领域,没有密码学生命都没有意义。阿尔瓦罗就是这样的一个人,它正在设计一个为西班牙杂烩菜饭加密的步骤。他在加密算法中应用了一......
  • 由于JavaScript有两种方式两种写法Creating a regular expression,在线测试网站https:/
    constre=/ab+c/;constre=newRegExp("ab+c");如果要使用第二种方式需要改变flavor和delimiters  RegExp比//需要额外的一次转义可以点击CodeGenerator查看   delimiters的不同会影响所需要的转义......
  • P1077 [NOIP2012 普及组] 摆花
    题目:链接:https://www.luogu.com.cn/problem/P1077总的来说就是和上题差不多?记dp[i][j]为前i种花塞进了j的背包的种类,那么状态转移方程:就是:dp[i][j]=dp[i-1][j]+dp[i-1]j-k贴代码:#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<ss......
  • 【LC周赛391】3102. 最小化曼哈顿距离
    题目描述解析一道很有意思的题目和一份写得很优雅的C++代码。问题关键在于如何高效求解曼哈顿距离借用一位大神的图:因此有公式:曼哈顿距离=\(max(|x_1'-x_2'|,|y_1'-y_2'|)\),其中\(x'=x+y,y'=y-x\).【切比雪夫距离】为方便求解数组中的最大值和最小值,使用multiset数据......