Laravel7.15.0学习中遇到的坑—Eloquent ORM的使用

前言:

最近在学习 laravel 框架,学习的版本是 7.15.0 ,记录一下学习过程中遇到的问题和难点以及一些总结。

介绍

Laravel 内置的 Eloquent ORM 提供了一个美观、简单的与数据库打交道的 ActiveRecord 实现,每张数据表都对应一个与该表进行交互的模型(Model),通过模型类,你可以对数据表进行查询、插入、更新、删除等操作。所有 Eloquent 模型都继承自 Illuminate\Database\Eloquent\Model 类,可以使用 Artisan 命令来创建模型类。

使用
//在项目所在的文件夹命令行中运行命令,在 app 文件夹下会生成 AdminModel.php文件
php artisan make:model AdminModel

在这里插入图片描述AdminModel.php 中的代码示例如下:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;//软删除

class AdminModel extends Model
{
    /**
     * 关联到模型的数据表
     * @var string
     */
    //在模型中定义 table 属性来指定自定义的表名
    protected $table = 'admin';
    //在模型中定义 id 属性来定义表的主键
    protected $primaryKey = 'id';
    //当调用save等方法时会自动保存时间,自定义时间戳格式,设置模型中的 $dateFormat 属性。该属性决定日期被如何存储到数据库中
    //以及模型被序列化为数组或 JSON 时日期的格式
    //模型日期列的存储格式
    protected $dateFormat = 'U';
    //自定义用于存储时间戳的字段名称
    const CREATED_AT = 'create_time';//表中的创建时间,对应表中需要存在该字段
    const UPDATED_AT = 'update_time';//表中的更新时间,对应表中需要存在该字段
    const DELETED_AT = 'delete_time';//表中的删除时间,需要软删除的时候使用,对应表中需要存在该字段
    //在保存数据时如果使用create方法,(返回值为模型实例)需要指定允许接收的参数
//    protected $fillable = ['id','username','password'];
    //或者使用$guarded来接收所有参数
//    protected $guarded = [];

    //连接不同的数据库
    //连接另一个数据库,其余配置相同,connection的值为database数据库配置文件中的另一个数据库的参数
    //另外一个数据库名称,这里读取的是config/database.php中的mysql设置,连接新的数据库需要重新配置一套
//    protected $connection = 'mysql_new';
}

在控制器方法中可以实例化这个模型类进行数据库的增加、删除操作。

    /**
     * 创建一个新增测试实例
     * @param  Request  $request
     */
    public function addAdmin(Request $request)
    {
        //实例化这个模型类
        $adminModel = new AdminModel;
        $adminModel->name = $request->name;
        $adminModel->nickname = $request->nickname;
        $adminModel->save();
        return response()->json(['code'=>1,'msg'=>'新增成功']);
    }

    /**
     * 创建一个编辑测试实例
     * @param  Request  $request
     */
    public function editAdmin(Request $request)
    {
        //实例化这个模型类
        $adminModel = new AdminModel;
        $adminInfo = $adminModel::find(715);
        $adminInfo->nickname = $request->nickname;
        $adminInfo->save();
        return response()->json(['code'=>1,'msg'=>'编辑成功']);
    }
软删除

当开启软删除后,查询时会默认去除已删除的数据。

//查询时将删除数据共同查询
$data = AdminModel::withTrashed()->get();
//只查询删除的数据
$data = TestModel::onlyTrashed()->get();
//恢复删除的数据
$adminModel = new AdminModel();
$adminModel->where('id',119)->restore();
//永久删除
$test->where('id',119)->forceDelete();
复制模型

replicate 可以复制之前保存的数据,当需要保存多条数据时且有字段相同时,可以直接复制数据然后修改后保存。

    /**
     * 创建一个新增测试实例
     * @param Request $request
     */
    public function addAdmin(Request $request)
    {
        $data = ['name' => 'liuxiang', 'nickname' => '刘祥', 'password' => '234sdf'];
        $adminData = AdminModel ::create($data);
        $adminNewData = $adminData -> replicate() -> fill(['nickname' => '刘翔']);
        $adminNewData -> save();
        return response() -> json(['code' => 1, 'msg' => '新增成功']);
    }

需要注意的一点是在使用 create 方法创建新数据的时候,需要在对应表的 model 类中添加如下的代码,不然就会出现添加的字段报错,默认接收全部的参数使用 protected $guarded = [];

//在保存数据时如果使用create方法,(返回值为模型实例)需要指定允许接收的参数。
protected $fillable = ['id','username','password'];
//或者使用$guarded来接收所有参数
protected $guarded = [];
集合

Eloquent 返回的包含多条记录的结果集都是 Illuminate\Database\Eloquent\Collection 对象的实例,包括通过 get 方法或者通过访问关联关系获取的结果。Eloquent 集合对象继承自 Laravel 的集合基类,因此很自然的继承了很多处理 Eloquent 模型底层数组的方法。

    /**
     * 可以使用 map 方法获取集合中的每一项,相当于数组中的 foreach 循环
     * @return \Illuminate\Http\JsonResponse
     */
    public function getAdminList()
    {
        $users = AdminModel ::whereBetween('id', [700, 704]) -> get();
        $names = $users -> map(function ($user) {
            return $user -> name;
        });
        return response() -> json(['code' => 1, 'data' => $names]);
    }
序列化

序列化为数组

//所有属性及其关联对象属性(包括关联的关联)都会被转化为数组
$user = AdminModel::where('id',704)->first();
return $user->toArray();
//将模型的属性转化为数组
$user = AdminModel::where('id',704)->first();
return $user->attributesToArray();
//转化整个模型集合为数组
$user = AdminModel::all();
return $user->toArray();

序列化为 JSON

//所有属性及其关联属性都会被转化为 JSON
$user = AdminModel::find(704);
return $user->toJson();
return $user->toJson(JSON_PRETTY_PRINT);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值