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

发布于:2024-04-19 ⋅ 阅读:(172) ⋅ 点赞:(0)

在这里插入图片描述


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

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

👨‍💻 本文由 曼亿点 原创

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

🅰

请添加图片描述



前言

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

创建属性的代码如下:

<?php

namespace 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程序开发你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述


网站公告

今日签到

点亮在社区的每一天
去签到