laravel model 模型详细基本用法
laravel model 模型基本用法
一.定义模型
1.命令
php artisan make:model User
如果你想要在生成模型时生成数据库迁移,可以使用--migration 或-m 选项:
php artisan make:model User --migration或-m
2.Eloquent使用的表名
默认规则是模型类名的复数作为与其对应的表名,除非在模型类中明确指定了其它名称,在model中定义
$table = 'my_flights';
3.主键
Eloquent 默认每张表的主键名为id ,你可以在模型类中定义一个$primaryKey 属性来覆盖该约定
4.时间戳
默认情况下,Eloquent 期望created_at 和updated_at 已经存在于数据表中,如果你不想要这些 Laravel自动管理的列,在模型类中设置$timestamps 属性为false
如果你需要自定义时间戳格式,设置模型中的$dateFormat 属性,该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期的格式
二.常用方法
1.获取所有记录
$flights = Flight::all();
2.访问列值
$flight->name;
3.每一个 Eloquent 模型都是一个查询构建器,所以适用于数据库操作中查询的所有方法
如:
$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
三.集合
组块结果集
如果你需要处理成千上万个 Eloquent 结果,可以使用chunk 命令。chunk 方法会获取一个“组块”的 Eloquent 模型,并将其填充到给定闭包进行处理。使用chunk 方法能够在处理大量数据集合时有效减少内存消耗:
Flight::chunk(200, function ($flights) {foreach ($flights as $flight) {//}
});
四.单条记录/聚合结果
1.单条记录
// 通过主键获取模型...
$flight = App\Flight::find(1);
// 获取匹配查询条件的第一个模型...
$flight = App\Flight::where('active', 1)->first();
firstOrFail/firstOrFail //如果记录没找到,返回404错误
2.聚合结果
$count = App\Flight::where('active', 1)->count();
$max = App\Flight::where('active', 1)->max('price');
五.插入/更新记录
1.基本插入
$flight = new Flight;
$flight->name = $request->name;
$flight->save();
2.基本更新
$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();
3.批量赋值
批量赋值,需要在模型中指定$fillable或guarded属性,前者表示那些字段能被赋值,后者表示那些字段不能被赋值
class Flight extends Model{/*** 不能被批量赋值的属性** @var array*/protected $guarded = ['price'];}
使用create 方法在数据库中插入一条新的记录,create 方法返回保存后的模型实例
$flight = App\Flight::create(['name' => 'Flight 10']);
4.firstOrCreate/firstOrNew
firstOrCreate 方法先尝试通过给定列/值对在数据库中查找记录,如果没有找到的话则通过给定属性创建一个新的记录
firstOrNew 方法和firstOrCreate 方法一样先尝试在数据库中查找匹配的记录,如果没有找到,则返回一个的模型实例。注意通过firstOrNew 方法返回的模型实例并没有持久化到数据库中,你还需要调用save 方法手动持久化
// 通过属性获取航班, 如果不存在则创建...
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);
// 通过属性获取航班, 如果不存在初始化一个新的实例...
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);
六.删除模型
1.通过主键删除
App\Flight::destroy(1);
App\Flight::destroy([1, 2, 3]);
App\Flight::destroy(1, 2, 3);
2.where删除
$deletedRows = App\Flight::where('active', 0)->delete();
3.软删除
如删除是,如果数据表有deleted_at字段,如果该字段为非空,那么该模型就表示已经被软删除了.
在模型中启用软删除
class Flight extends Model{use SoftDeletes;
}
这样在调用delete时,将会启用软删除
4.判断模型是否被软删除
if ($flight->trashed()){....}
5.软删除的记录,在使用模型查询时将会自动从查询结果中排除掉,如果要包含软删除的记录
$flights = App\Flight::withTrashed()->where('account_id', 1)->get();
$flight->history()->withTrashed()->get()
6.只获取软删除的记录
$flights = App\Flight::onlyTrashed()->where('airline_id', 1)->get();
7.恢复软删除记录
$flight->restore();
App\Flight::withTrashed()->where('airline_id', 1)->restore();
$flight->history()->restore();
8.彻底从数据库中删除
// 强制删除单个模型实例...
$flight->forceDelete();
// 强制删除所有关联模型...
$flight->history()->forceDelete();
七.查询作用域
1.基本
public function scopePopular($query)
{return $query->where('votes', '>', 100);
}
调用
$users = App\User::popular()->orderBy('created_at')->get();
2.动态作用域
public function scopeOfType($query, $type)
{return $query->where('type', $type);
}
$users = App\User::ofType('admin')->get();
八.事件
Eloquent 模型可以触发事件,允许你在模型生命周期中的多个时间点调用如下这些方法: creating , created ,updating , updated , saving , saved , deleting , deleted , restoring , restored 。事件允许你在一个指定模型类每次保存或更新的时候执行代码。
一个新模型被首次保存的时候, creating 和created 事件会被触发。如果一个模型已经在数据库中存在并调用save/方法, updating/updated 事件会被触发。 举个例子,我们在服务提供者中定义一个 Eloquent 事件监听器,在事件监听器中,我们会调用给定模型的isValid 方法,如果模型无效会返回false 。如果从 Eloquent 事件监听器中返回false 则取消save/update 操作
<?php
namespace App\Providers;
use App\User;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider{/*** 启动所有应用服务** @return void*/public function boot(){User::creating(function ($user) {if ( ! $user->isValid()) {return false;}});}/*** 注册服务提供者.** @return void*/public function register(){//}
}
laravel model 模型详细基本用法相关推荐
- php ci model条件查询,Laravel关系模型指定条件查询方法
对于关系模型来说,有时候我们需要甄别关联后结果,例如,班级和学生是一对多关联,我现在查询班级,但是想只显示正常状态,即状态为1的学生,因为有的学生从这个班级里面删除了,状态是4,那么我们在查询的时候就 ...
- php8预加载,如何利用预加载优化Laravel Model查询详解
前言 本文主要给大家介绍了关于利用预加载优化Laravel Model查询的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 介绍 对象关系映射(ORM)使数据库的工作变得非常简单 ...
- laravel log 对象_swoole运行模式加速laravel应用的详细介绍(life)
本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我的官方群点击此处. 一.Swoole Swoole ...
- 语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}
Kmean算法 聚类算法 对于"监督学习"(supervised learning),其训练样本是带有标记信息的,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新 ...
- Django model select的各种用法详解
<Django model update的各种用法介绍>文章介绍了Django model的各种update操作,这篇文章就是她的姊妹篇,详细介绍Django model select的用 ...
- keras系列︱Sequential与Model模型、keras基本结构功能(一)
不得不说,这深度学习框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是错的,快到官方文档也有旧的没更新,前路坑太多. 到发文为止,已经有theano/tensorflow/CNT ...
- 【Pytorch】model.train() 和 model.eval() 原理与用法
文章目录 一.两种模式 二.功能 1. model.train() 2. model.eval() 为什么测试时要用 model.eval() ? 3. 总结与对比 三.Dropout 简介 参考链接 ...
- riopoly matlab,MATLAB-空间计量模型详细步骤
<MATLAB-空间计量模型详细步骤>由会员分享,可在线阅读,更多相关<MATLAB-空间计量模型详细步骤(23页珍藏版)>请在人人文库网上搜索. 1.1.excel与MATL ...
- apache支持laravel路由_swoole运行模式加速laravel应用的详细介绍
本篇文章给大家带来的内容是关于swoole运行模式加速laravel应用的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我的官方群点击此处. 一.Swoole Swoole ...
最新文章
- ajax提交不能进入后台_Ajax跨域问题
- html body onunload,html页面的onunload、onbeforeunload
- php-css外边距
- PHP判断客户端的浏览器类型
- [转]分布式事务之TCC服务设计和实现注意事项
- springmvc新建拦截器
- java高级编程期末考试题_java高级编程考题
- [Leedcode][JAVA][第209题][长度最小的子数组][滑动窗口][前缀和][二分查找][双指针]
- objective-c block 旧版详解
- 疫情向左、大基金向右,国产光刻胶走到了哪一步?
- java中scort意思_java入门—笔记
- LINUX:安装下载源码用的hg
- CS和BS 到底是什么
- html把div做成透明背景,DIV半透明层 CSS来实现网页背景半透明
- Meta-Tracker(ECCV 2018)视频目标跟踪源码运行笔记——Testing模式
- 5G钢铁渐入佳境:中国电信推动从“1”迈向“N”
- 怎样用计算机添加标题,Word中图片和表格如何自动添加标题
- python 操作微信订阅号(2022.7.1)
- Java 数据类型(基本数据类型、引用数据类型)
- CAPM 资本资产定价模型