Blogger Information
Blog 128
fans 9
comment 5
visits 241321
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
17.)PHPWeb开发框架~Laravel中模型操作使用快速入门(AR模式)讲解
 一纸荒凉* Armani
Original
1482 people have browsed it

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

AR模式三个核心(映射):

每个数据表            与数据表进行交互的Model模型映射(实例化模型)

记录中的字段          与模型类的属性映射(给属性赋值)

表中的每个记录         与一个完整的请求实例映射(具体的CURD操作)

1、定义模型

(1)定义位置

定义模型的位置,默认是在app目录下面,但是为了管理方便,建议分目录进行创建:

img

(2)命名规则

本身laravel对模型的命名没有严格的要求,一般采用 表名(首字母大写).php

比如:Member.php User.php Goods.php

(3)创建模型

可以使用artisan命令;

# 使用artisan命令php artisan make:model 模型文件名# 分目录的php artisan make:model Models/Member# 创建模板并生成迁移文件php artisan make:model Models/Article –m-m 生成迁移文件

img

创建好的初始代码:

img

<?phpnamespace App\home;use Illuminate\Database\Eloquent\Model;class Admins extends Model{    //}

(4)定义模型注意事项(重点)

  • 第一:(必做)定义一个$table属性,值是不要前缀的表名,如果不指定则使用类名的复数形式作为表名。如果模型为Member模型在不指定table属性的情况下,其默认会去找members表。修饰词:protected

  • 第二:(可选)定义$primaryKey属性,值是主键名称,如果需要使AR模式的find方法,则可能需要指定主键(Model::find(n)),在主键字段不是id的时候则需要指定主键。修饰词:protected

  • 第三: (可选)定义$timestamps属性,值是false,如果不设置为false,则默认会操作表中的created_at和updated_at字段,我们表中一般没有这两个字段,所以设置为false,表示不要操作这两个字段。修饰词:public

  • 第四:(可选)定义$fillable属性,表示使用模型插入数据时,允许插入到数据库的字段信息。修饰词:protected

    当通过create方法来保存数据的时候,你需要先在你的模型上定义$fillable或
    $guarded属性。

// 批量赋值# 白名单protected $fillable = [‘允许添加的字段名’];# 黑名单protected $guarded = [‘拒绝添加的字段名’];

img

<?phpnamespace App\home;use Illuminate\Database\Eloquent\Model;class Admins extends Model{    //定义模型关联的数据表(一个模型只能操作一张表)       protected $table = 'admins';       // 定义主键(可选)       protected $primaryKey = 'id';       // 定义禁止操作时间       public $timestamps = false;       // 设置允许写入的数据字段       protected $fillable = ['id','username','password','truename','gid','status','add_time'];}

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

2、模型控制器中调用

引入Member模型类;

img

模型的使用:模型在控制器中的使用方式有2种

①直接像使用DB门面一样的操作方式:以调用静态方法为主的形式,该形式下模型不需要实例化,例如:Member::get() 等价于DB::table(‘member’) -> get();

②实例化模型然后再去使用模型类(普通)

$model = new Member();print_r($model->get());

3、定义测试路由

img

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

4、CURD基本操作

(1)添加数据

在laravel里面完成数据的添加可以使用三种方式:

  • save() # 对象属性方式

  • create() # 数组方式 需要在模型中设置好fillable或guarded属性

  • insert() #数组方式

方式一(AR模式):使用AR模式必须要实例化模型

注意:在laravel里面添加数据的时候,需要先实例化模型,然后为模型设置属性,最后调用save方法即可。

$member= new Member();//映射关系1:将表映射到模型$member->name = value;//映射关系2:将字段映射到属性,属性名和字段名一致$member-> age = value;…$member-> save();      //映射关系3:将记录映射到实例
<?phpnamespace App\Http\Controllers\home;use App\Http\Controllers\Controller;use Illuminate\Http\Request;use App\home\Admins;class IndexController extends Controller{    public function index(){           $admins = new Admins();           $admins->username = 'zhang';           $admins->password = '123456';           $admins->truename = '张帅';           $admins->gid = '1';           $admins->status = '1';           $admins->add_time = time();           $admins->save();       }}

如果模型中不去关联数据表,则会报以下的错误:

img

img

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

方式二:

建立简易表单,表单中有姓名、年龄、邮箱的字段,要求能够提交

img

img

img

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

use Illuminate\Http\Request;

Request类的使用:

①对象传递

img

②request语法(与input门面有点类似,方法名一致,但是input调用的是静态方法,而当前的不是)

$request->all()$request->input('name');$request->only([‘name1’,’name2’…])$request->except([‘name1’,’name2’…])$request->has(‘name’)$request->get(‘name’)

添加操作代码语法如下;

Member::create($request->all()) //返回值是一个对象

img

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

执行的结果:

img

(2)查询操作

获取指定主键的一条数据

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

img

其结果集默认是一个对象。

如果需要在laravel中对象的结果集转化成数组,则需要在最终添加方法的调用:

$info = Member::get()-> toArray();

所以刚才的案例,如需要数组结果,则可以写成:

$data =Member::find(4) -> toArray();

img

获取符合指定条件的第一条记录

Member::where("id",'>',4)->first();

img

查询多行并且指定字段

Member::all()  

Member::all([字段1,字段2])   //与get方法的区别,all不支持连接其他的辅助查询方法

相当于get方法

Member::get()  

Member::get([字段1,字段2])

按条件查询指定多个字段

Member::where('id','>',2)->get([' 列 1',' 列 2']);    //数组选列Member::where('id','>',2)->select('列1','列2')->get();//字符串选列Member::where('id','>',2)->select( [' 列 1',' 列 2'] )->get();//字符串选列

案例:测试在all方法之前,写一些辅助方法实现连贯操作

img

# 查询单条   first()Admins::first()->toArray()# 查询多条   get() all()Admins::get()->toArray()# 条件   where()Admins::where('id','1')->first()->toArray()# 排序   orderBy()Admins::orderBy('id','desc')->get()->toArray()# 取指定的值   value()Admins::where('id','3')->value('username')Admins::where('id','3')->select('username')->first()->toArray()# 取指定的列  pluck()Admins::pluck('username')->toArray()Admins::select('username')->get()->toArray()# 查询总记录数  count()Admins::count()#根据id查询   findOrFail()Admins::findOrFail(3)->toArray()Admins::where('id','3')->first()->toArray()

(3)修改数据

模型中修改数据有两种方式:

  • save() # 对象属性方式 指定主键即为修改,不指定则为新增

  • update() # 数组

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

例如:

$user = User::find($id);$user->title = $_POST['title'];$user->content= $_POST['content'];return $user->save() ? 'OK' : 'fail';

案例:实现ORM形式模型的修改操作。修改为7 的用户的邮箱地址为admin@itcast.cn

img

问题:能不能用模型去update呢?

答:可以使用update方法进行更新,也可以使用AR模式的方式进行更新。

img

(4)删除数据

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

例如代码:

$user = User::find($id);return $user->delete() ? 'ok' : 'fail';

案例:使用AR模式删除id为7的记录

img

问题:DB里面的删除方式能否在模型中使用?【可以】

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post