【php开发工程师系统性教学】——laravel的模型和控制器的详细介绍和融会贯通

embedded/2024/10/19 0:22:16/

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:PHP程序开发

🅰

请添加图片描述


文章目录

    • 🅰
    • 前言
    • 🎶一、 模型的创建
      • 🐤1.定义模型
      • 🐤2.命名规则
      • 🐤3.创建模型
      • 🐤4.创建模型的注意事项
    • 🎶二、模型在控制器的引入
    • 🎶三、模型的添加操作
    • 🎶四、模型的查询修改删除操作
      • 🐤1.查询
      • 🐤2.修改
      • 🐤3.删除
        • 结束语🥇


前言

Laravel自带的Eloquent ORM 提供了一个美观、简单的与数据库打交道的ActiveRecord实现,每张数据对对应一个与该表进行交互的"Model"模型,模型允许你在表中进行数据查询,以及插入、更新、删除等。

AR模式三个核心(映射)

名称解析
每个数据表与数据进行交互的MOdel模型映射(实列化模型)
记录的字段与模型类的属性映射(给属性赋值)
表中的每个记录与一个完整的请求实列映射(具体的CURD操作)

🎶一、 模型的创建


🐤1.定义模型

(1)定义位置
定义模型的位置,默认在app目录下面,但是为了管理方便,建议目录进行创建:
在这里插入图片描述

🐤2.命名规则

本身laravel对模型的命名没有严格的要求,一般采取表名(首字母大小).php
比如:Member.php    User.php   Goods.php

🐤3.创建模型

可以使用artisan命令:

[project]>php artisan make::model Member

在这里插入图片描述
在这里插入图片描述

界面区:
在这里插入图片描述

🐤4.创建模型的注意事项

  第一:(必做)定义一个table 属性,值是不要前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member 模型在不指定 table 属性的情况下,其默认会去找members 表。修饰词:protected。
  第二:(可选)定义primaryKey,属性,值是主键名称,如果需要使 AR 模式的 find 方法,则可能需要指定主键(Model:.find(n)),在主键字段不是id 的时候则需要指定主键。修饰词protected。
  第三:(可选)定义timestamps 属性,值是false,如果不设置为false,则默认会操作表中的 created _at.和 updated_at,字段,我们表中一般没有这两个字段,所以设置为 false,表示不要操作这两个字段。修饰词:public。
  第四:(可选)定义$fiable 属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected

创建属性的代码如下:

<?phpnamespace App\Models\Home;use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;class Member extends Model
{//定义模型关联的数据表(一个模型只操作一个表)protected $table='member';//定义主键(可选)protected $primaryKey='id';//定义禁止操作时间public $timestamps=false;//设置允许写入的数组字段protected $fillable=['id','name','age','email','avatar'];//use HasFactory;
}

注意:使用模型中create插入数据时,要设置fillable允许入库的字段,使用guarded是设置排除入库的字段。


🎶二、模型在控制器的引入


1.引入Member模型类:use App\Member;
在这里插入图片描述
  2.模型的使用:模型在控制器中的使用方式有两种:
  ①直接像使用DB门面一样的操作方式,以调用静态方式为主的形式,该形式下模型不需要实例化:Member::get() 等价于 DB:table(“member”)->get( );
  ②实列化模型然后再去使用模型类(普通)
列如:$model=new Member: $ model->get();

  3.定义测试路由:

//模型的增删改查;
Route::any(‘/homeAdda’,[IndexController::class,‘adda’])->name(‘adda’);
Route::get(‘/homeDela’,[IndexController::class,‘dela’]);
Route::get(‘/homeUpdatea’,[IndexController::class,‘updatea’]);
Route::get(‘/homeSelecta’,[IndexController::class,‘selecta’]);

  路由可以使用路由1群组的方式进行定义。


🎶三、模型的添加操作


  在larave里面完成添加可以使用两种方式
方式一:(AR模式):使用AR模式必须要实列化模型
注意:在laravel里面添加数据的时候,需要先实列化模型,然后为模型设置属性,最后调用save方式即可:

$ member =new Member( ); //映射关系1:将表映射到模型
$ member->name=value ;//映射关系2:将字段映射到属性,属性名和字段名一致
$ member->age=value ;

$ member ->save( );//映射关系1:将表映射到实列

public function adda( )
{//表映射到模型类(给属性赋值的操作)$model=new Member();//给属性赋值$model->name='张三';$model->age='23';$model->email='zhangsan@qq.com';// //去做具体的操作,将记录映射到实列$result=$model->save();dd($result);   
}

  以上的方式可以完成数据的插入,但是不建议使用。我们可以使用laravel提供的更加高级的操作。

方式二:建立一个简要的表单,表单中有姓名、年龄、邮箱的字段,要求能够提交。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><link rel="stylesheet" href="css/weui.css"/><meta name="viewport" content="width=device-width, initial-scale=1.0">{{-- 系统的asset方法引入 --}}<link rel="stylesheet" type="test/css" href="{{asset('css')}}/app.css"><title>实战训练</title>
</head>
<body><form method="post" action="{{route('adda')}}">
<p>姓名:<input type="text" name='name' value="" ></p>
<p>年龄:<input type="text" name='age' value="" ></p>
<p>邮箱:<input type="text" name='email' value="" ></p>
{{ csrf_field() }}<input type="submit" value="提交">
</form>
</body>
</html>

展示图:
在这里插入图片描述

首先,在控制器文件引入Request这个类

use Illuminate\Http\Request;

在这里插入图片描述

添加代码的模型类代码:

//添加方式-AR模式,OMR模式
public function adda(Request $request)
{//表映射到模型类(给属性赋值的操作)$model=new Member();$requests = $request -> all();$result = $model -> create(['name' => $requests['name'], 'age' => $requests['age'], 'email' => $requests['email']]);var_dump($request->all());dd($result);};

展示图:
在这里插入图片描述

  注意:如果使用create方法,则需要在模型中定义fillable属性,允许写入字段的定义,如果没有时间相关字段也需要禁用时间自动更新功能。
在这里插入图片描述


🎶四、模型的查询修改删除操作


🐤1.查询

  获取指定主键的一条数据

$ info =Member::find(4);//静态的方法的调用,获取主键为4的数据

案列:查询一个id>4的第一个数据数组:

//查询操作
public function selecta()
{
//查询指定主键记录
//$data=Member::find(1)->toArray();
$data=Member::where('id','>',4)->first()->toArray();
dd($data);
}

结果图:
在这里插入图片描述
在这里插入图片描述

🐤2.修改

  注意:在laravel里面如果需要更新数据(ORM模型方式),需要首先调用模型的find 方法获取对应记录,返回一个模型对象,然后为该模型对象设置要更新的新数据(对象的属性)最后调用save()
即可:
例如:

$ user =User::find($id);
$ user ->title=$ POST[‘title’];

案例:实现ORM形式模型的修改操作。修该为7的用户的邮箱admin@nnb.com

//对数据进行修改
public function updatea()
{
$data=Member::find(7);
$data->email='admin@nnb.com';
$result=$data->save();
dd($result);
}

展示图:
在这里插入图片描述

🐤3.删除

  注意:在laravel里面如果需要删除数据(ORM模型方式),如果需要使用AR删除数据必须id查询对应的记录,返回一个模型对象,然后调用模式对象的delete方法即可。
例如代码:

$ user=User::find( $id)
return $ user->delect()?‘ok’:‘fail’;

案列:使用AR模型删除id为7的记录

//对数据进行删除
public function dela()
{$data=Member::find(7);$result=$data->delete();dd($result);
}

展示图:
在这里插入图片描述

结束语🥇

以上就是PHP程序设计
持续更新PHP程序设计教程,欢迎大家订阅系列专栏🔥PHP程序开发你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述


http://www.ppmy.cn/embedded/5313.html

相关文章

cobaltstrike 流量隐藏

云函数 新建一个云函数&#xff0c;在代码位置进行修改 首先导入 yisiwei.zip 的云函数包 PYTHON # -*- coding: utf8 -*- import json, requests, base64def main_handler(event, context):C2 https://49.xx.xx.xx # 这里可以使用 HTTP、HTTPS~下角标~ path event[path]h…

1 GBDT:梯度提升决策树

1 前言 前面简单梳理的基本的决策树算法&#xff0c;那么如何更好的使用这个基础算法模型去优化我们的结果是本节要探索的主要内容。 梯度提升决策树&#xff08;Gradient Boosting Decision Trees&#xff09;是一种集成学习方法&#xff0c;通常用于解决回归和分类问题。它通…

危险场景智能运维巡检系统

在石油、天然气、煤炭和化工等行业&#xff0c;特别是在I/IIC级防爆区场景中&#xff0c;存在着诸如易燃、易爆、高温、有毒有害以及粉尘等危险因素。例如&#xff0c;油气转运站、催化裂化装置、煤化工甲醇车间以及制氢站等地点&#xff0c;都面临着这些潜在的危险。传统的人工…

使用Python制作读单词视频(含源码)

文章目录 1. 项目简介2. 项目使用2.1 功能介绍2.2 使用Colab生成视频 3. 项目原理介绍 1. 项目简介 项目源码地址&#xff1a;https://github.com/iioSnail/read_video_generation 我们经常在B站或其他视频网站上看到那种逐条读单词的视频&#xff0c;但他们的视频多多少少和…

JVM 性能调优命令(jps,jinfo,jstat,jstack,jmap)

常用命令&#xff1a;jps、jinfo、jstat、jstack、jmap jps jps查看java进程及相关信息 jps -l 输出jar包路径&#xff0c;类全名 jps -m 输出main参数 jps -v 输出JVM参数jps命令示例 显示本机的Java虚拟机进程&#xff1a; # jps 15729 jar 92153 Jps 90267 Jstat显示主类…

前端实现将内容复制到剪切板的实现方法(个人项目使用)

export const writeStringToClipboard (text:string)>{const eldocument.createElement(textarea);el.valuetext;document.body.appendChild(el);el.select();document.execCommand(copy);document.body.removeChild(el); } 其中, document.execCommand已经被废弃了,不建议…

搜维尔科技:【工业仿真】煤矿安全知识基础学习VR系统

产品概述 煤矿安全知识基础学习VR系统 系统内容&#xff1a; 煤矿安全知识基础学习VR系统内容包括&#xff1a;下井流程&#xff08;正确乘坐罐笼、班前会、井下行走注意事项、工作服穿戴、入井检身及人员清点、下井前准备工作、提升运输安全&#xff09;&#xff1b;运煤流程…

STM32电机控制SDK实战

一、前言 本次测试基于ST开发板NUCLEO-F302R8&#xff0c;驱动板X-NUCLEO-IHM07M1&#xff0c;使用无刷直流电机BLDC实现FOC控制&#xff1b;采样三霍尔传感器检测电机转子位置&#xff1b;基于速度环闭环控制实现电机转动&#xff1b; 二、实战环境 软件环境&#xff1a; 1…