-
2021-04-29 08:32:50
Laravel model常用方法(持续更新中)
那随意了 • 2019 年 12 月 17 日
Laravel model常用方法
增Classes::create($request->all());
删Classes::findOrFail($id)->delete();
关联删除
classes.php<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Classes extends Model
{
//
protected $fillable = [
'name','department','open',
];
public function courses(){
return $this->hasMany('App\Courses');
}
}
Courses.php<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Courses extends Model
{
//
public function classes(){
return $this->belongsTo('App\Classes');
}
}
之后执行Classes::findOrFail($id)->courses()->delete();//先删除关联之下的课程字段
Classes::findOrFail($id)->delete();//然后删除班级
改$classes=Classes::FindOrFail($id);
$classes->name=$request->name;
$classes->department=$request->department;
$classes->save();
查$classes=Classes::FindOrFail($id);
//个人推荐使用FindOrFail,因为在查询是做关联查询,如果使用findOrFail会报404,而使用find会报空指针异常
//或
$classes=Classes::find($id);
//有时你希望在未找到模型时抛出异常。这在控制器和路由中非常有用。 findOrFail 和 firstOrFail 方法会检索查询的第一个结果,如果未找到,将抛出 Illuminate\Database\Eloquent\ModelNotFoundException 异常:。
如果没有捕获异常,则会自动返回 404 响应给用户。也就是说,使用这些方法时,没有必要再写个检查来返回 404 响应:
//查询第一条数据
$open=Classes::where('open',1)->first();
关联查询$classes=Classes::find($id);//先获取对象的实例
$courses=$classes->courses()->get();//查询对应的实例
相关阅读
laravel框架中的Model操作数据库 , 相比DB类有什么明显的优越性吗?
更多相关内容 -
在Laravel的Model层做数据缓存的实现
2020-10-16 07:28:10主要介绍了在Laravel的Model层做数据缓存的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
model-utils:从laravel模型中提取元数据,生成基本验证规则,从文件系统中检索模型
2021-05-24 07:02:23该软件包提供了一种从laravel模型中检索有用的元数据的简单方法 在psr-4目录结构中查找所有模型 从数据库检索所有列和元数据 检索索引元数据 使用元数据生成基本验证规则 模型类型提示已删除,可以使用 安装 如果您... -
Laravel实现批量更新多条数据
2020-12-17 20:24:03近期在刷新生产环境数据库的时候,需要更新表中的字段,如果对每条数据结果都执行一次update语句,占用的数据库资源就会很多,而且速度慢。 因为项目是Laravel框架,Laravel有批量插入的方法,却没有批量更新的方法... -
在laravel框架中使用model层的方法
2021-01-02 13:28:46创建model:php artisan make:model privilegeModel(名字随便写,可以不加Model) 控制器层加载model <?... //注意命名空间 ... use app\privilegeModel;... $model=new \App\PrivilegeModel();... //调用model层中方法 -
Laravel 数据库Model学习
2022-04-19 09:03:55如果需要关联的数据表的名称,不是model文件的复数,比如:model文件:member 表名:(members)、model文件:user 表名:(users); 上面这种情况的话,在model文件内设置关联的表名: protec注意:对数据的操作时,需要查看自己嗯.env文件里的默认数据库是否跟改为需要操作的目标数据库
一、创建model模型文件:
php artisan make:model Home/Member
创建后的文件会放在app目录下的Models目录下二、model文件关联数据库表:
如果需要关联的数据表的名称,不是model文件的复数,比如:model文件:member 表名:(members)、model文件:user 表名:(users);
上面这种情况的话,在model文件内设置关联的表名:
protected $table = 'member' //设置model文件关联member表
三、model文件的主键名:
默认的主键名是id字段,并且为整型自增;
如果表中的主键名不是id字段的话,就需要自己通过对应的属性设置://设置主键默认字段 protected $primaryKey = 'id_cord'; // 设置主键的字段类型 protected $keyType = 'String'; // 设置主键是否自增 public $incrementing = 'false';
四、时间字段:
默认情况下,model里面默认有created_at(数据创建时间)和updated_at(数据更新时间),如果不想要自动管理这两列,可以设置
$timestamps
属性为false
:
public $timestamps = false;
如果数据表中的创建时间字段和更新字段不是model默认的话可以对名字重新定义:const CREATED_AT = 'create_time'; const UPDATED_AT = 'modify_time';
-
Laravel Model 的增删改查
2022-04-19 09:37:18Model类的增删改查: 查: use App\Http\Controllers\Controller; use App\Models\Home\Member; class Controllers extends Controller { //查询记录 public function select(){ // 查询所有记录只有name字段 ...Model类的增删改查:
查:
use App\Http\Controllers\Controller; use App\Models\Home\Member; class Controllers extends Controller { //查询记录 public function select(){ // 查询所有记录只有name字段 $data = Member::all(['name']); // 打印查询信息 dump($data); // 查询age大于18岁的记录 $data = Member::where('age','>','18')->get(); // 打印查询结果 dump($data); } }
查询后的结果为:
查询后,返回的是一个model模型类。每条记录是放在:
attributes
中:
发现original
里面的数据和attributes
里面的数据是一样的:
original
:数据库原始数据;
attributes
:后台操作后更改后的数据;遍历查询后的数据:
use App\Http\Controllers\Controller; use App\Models\Home\Member; class Controllers extends Controller { //查询记录 public function select(){ // 查询所有记录只有name字段 $data = Member::all(['name']); // 打印查询信息 // dump($data); // 遍历查询记录 foreach ($data as $v){ // 可以直接访问对应的属性名 echo $v->name.' '; } // 查询age大于18岁的记录 $data = Member::where('age','>','18')->get(); // toArray()将数据转换为数组 $data02 = Member::where('age','>','18')->get()->toArray(); // 打印查询结果 // dump($data); dump($data02); } }
访问结果为:
检索单条记录:find、first、firstWhere方法来检索单条数据记录,返回单个模型实例而不是模型集合。
查询年龄在18以上的第一条人员信息:
return Member::firstWhere(''age' ,'>',18); //返回满足条件的第一条记录
find:查询已知记录的主键:
Member::find(13);
增:
- new 一个model的实例对象:
//新增 public function insert(){ // 实例操作 // 对象记录对应,操作对象就是数据表的记录 $member = new Member(); // 数据是空的model实例 dump($member); // 对成员属性赋值就是对数据表字段新增值 $member->name = 'yy'; $member->age = 20; $member->email = 'xiaoyu@qq.com'; // 对数据进行save保存 dump($member) $member->save(); //save之后返回保存成功返回:true,失败返回false }
添加之后:后面的modelattibutes
多了三个数据;
数据库中,如果有created_at
和updated_at
字段model会默认管理这两个字段
批量赋值:
// 通过批量新增 //create方法 $data = [ 'name' => 'xiaohu', 'age' => 22, 'email' => 'xiaohu@163.com' ]; dump(Member::create($data));
还需要去model文件里面设置
$fillable
允许批量赋值的字段名称:
protected $fillable=['name','age','email'];
禁止批量赋值的字段名称
protected $guarded = ['is_admin'];
改:
单记录更新:
// 通过实例化方法进行修改修改(对id为13的记录,修改is_admin的值为2) //获得一条记录为实例 $data = Member::find(13); $data->is_admin = 2; dump($data->save()); // 修改大于11的记录的admin为2 $data = Member::where('id','>',11)->get(); foreach ($data as $v){ //遍历记录对象 $v->is_admin = 2; // 修改一条就需要对他进行保存 $v->save(); } dump($data);
批量修改记录:
// 批量修改 // 定义一个修改值的数组 $data = ['is_admin'=>1]; // 对id小于11的is_admin进行修改为1 $rest = Member::where('id','<',11)->update($data); // 返回更新行数 dump($rest);
删:
只会默认运行第一条删除命令
public function delete(){ // 根据id的值查询并且对查询后的记录进行删除 $rest = Member::find(9) -> delete(); // 返回值为:true和false dd($rest); // 批量删除id为【10,13,9】的记录,返回删除的记录行数 dd(Member::destroy([10,13,9])); // 对查询后的结果进行删除,返回值是删除的记录行数 dd(Member::where('age','>',66)->delete()); }
-
laravel model 模型详细基本用法
2020-04-22 15:54:09laravel model 模型基本用法 一.定义模型 1.命令 php artisan make:model User 如果你想要在生成模型时生成数据库迁移,可以使用--migration 或-m 选项: php artisan make:model User --migration或-m 2....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模型处理之修改查询或修改字段时的类型格式案例
2020-10-16 04:40:56今天小编就为大家分享一篇laravel model模型处理之修改查询或修改字段时的类型格式案例,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧 -
laravel model模型定义实现开启自动管理时间created_at,updated_at
2020-10-16 04:41:18今天小编就为大家整理了一篇laravel model模型定义实现开启自动管理时间created_at,updated_at,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Laravel根据Model数据复制一条记录
2019-10-12 10:17:57最近需要写个脚本补历史数据,要根据某条记录,复制一条记录,修改一个字段后再插入表中,原来想的比较简单,代码这样写: $oldModel = Model::query()->where('id', 123)->first(); $newModel = clone $old... -
Laravel批量更新多条数据
2019-09-04 11:01:58近期在刷新生产环境数据库的时候,需要更新表中的字段,如果对每条数据结果都执行一次update语句,占用的数据库资源就会很多,而且速度慢,显得也不高大上。 因为项目是Laravel框架,Laravel有批量插入的方法,却... -
laravel model 技巧
2021-10-26 13:50:021、设置默认属性返回值 protected $attributes = [ 'goal_distance' => '100', 'goal_time' => '0', ...通过withDefault()当查询未空时返回上面数据 public function preplan() { -
laravel-4-haversine-model:Laravel 模型中位置数据的大圆测量
2021-06-26 15:43:48laravel-haversine-model (Laravel 4) Laravel 模型中位置数据的大圆测量。 -
Laravel框架中数据库分表时Model使用方法
2022-01-11 17:50:040、最近在使用laravel框架做MySQL分表的时候经过实践和踩坑,总结了以下3中可行的分表方法,亲测可用。 1、本人公司做的是SaaS系统,以店铺为维度。店铺id(shop_id) 命名规则为: shop+6位随机数字字母+4位数字 。... -
laravel Model::updateOrCreate对数据更新操作
2018-04-16 11:56:03Model:<?php namespace App\Http\Model; use Illuminate\Database\Eloquent\Model; class Type extends Model { protected $table='type'; protected $primaryKey='tid'; protected $fillable=['t... -
Laravel Model模型关联
2022-04-24 08:41:23定义关联关系 数据库表通常相互关联。 例如,一篇博客文章可能有许多评论,或者一个订单对应一个下单用户。...其中guest表中的主键id字段对应着guestinfo中的外键user_id字段 首先创建两个model文件: -
保存 laravel model 而不更新 timestamps 的方法
2018-12-28 11:57:00$product = Product::find(1); $product->view_count += 1; $product->timestamps = false;...重置数据库数据 update products set updated_at = created_at; 转载于:https://www.cnblogs.com/s... -
Laravel ORM 数据model操作教程
2020-10-16 03:49:30今天小编就为大家分享一篇Laravel ORM 数据model操作教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
laravel Model 执行事务的实现
2021-01-19 17:59:511.官方手册是这样介绍的:想要在一个数据库事务中运行一连串操作,可以使用DB门面的transaction方法,如果事务闭包中抛出异常,事务将会自动回滚。如果闭包执行成功,事务将会自动提交。使用transaction方法时不需要... -
laravel模型中数据批量加入
2022-02-21 10:21:10laravel模型中数据批量加入 ** 控制器: //关联新增批量加入 $user = User::find(19); $user->book()->saveMany([ new Book(['title'=>'《哈利波特1》']), new Book(['title'=>'《哈利波特2》']) ... -
Laravel Model常用属性
2020-02-01 18:33:36$table = ‘应当操作的表名’; $primaryKey= ‘主键’;... $touches = [ ‘模型更新时应当一并更新的关联关系’]; $dispatchesEvents = [ ‘模型事件’=>‘自定义事件’(设置模型事件与自定义事件的映射)]; -
关于Laravel-admin的基础用法总结和自定义model详解
2020-10-16 06:10:10今天小编就为大家分享一篇关于Laravel-admin的基础用法总结和自定义model详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Laravel Model 的 fillable (白名单)与 guarded (黑名单)
2022-02-20 19:37:30laravel的create方法为批量赋值,save方法为逐个手动赋值,因此fillable和guarded对save方法不起作用而用于create方法 需要注意的是,fillable 与 guarded 只限制了 create 方法,而不会限制 save。 -
LaravelAdmin中model排序字段之间比较
2022-06-08 16:10:47LaravelAdmin中model排序字段之间比较两个字段的大小比较,把A大于B的查出来可以用 whereRaw('buyprice > productprice') 这种 需求:查出 buyprice > productprice 的数据可以用$grid->model()->whereRaw('... -
Laravel框架实现model层的增删改查(CURD)操作示例
2020-10-18 13:11:55主要介绍了Laravel框架实现model层的增删改查(CURD)操作,结合实例形式分析了Laravel框架模型model层进行数据库的增删改查操作具体实现技巧,需要的朋友可以参考下 -
七个必知必会的 Laravel Model 小知识
2021-04-29 08:31:40在这篇文章中,我会向你提供7个小提示,让每一个使用 Laravel 的人都知道应该如何充分利用你的模型。1 首先,让我们创建模型开始当我们通过命令行创建一个模型时,你可以指定在某个文件夹中创建这个模型。... -
laravel-model实现复杂的查询语句
2021-01-18 10:01:54有时候,我们想要获取的并不是一行或几行记录,而是某个字段的值,你当然你可以查询到一行记录后从结果对象中获取指定字段的值,但是 Laravel 为我们提供了更便捷的语法: $name = '学院君'; $email = DB