laravel傻瓜手册6(模型)

1.模型(App/Models)

(1)定义:模型类通常都会放在App/Models文件夹中,laravel默认没有这个文件夹,可以手动建,也可以命令创建模型类的时候自动创建,所有模型类都要继承Illuminate\Database\Eloquent\Model
(2)命令:创建一个index模型类 php artisan make:model Models/Index

(3)常用模型属性:

1.protected $table = '表名'           //指定对应的数据表

2.protected $primaryKey = '主键'  //指定对应表的主键字段名,默认是id

3.public $incrementing = false     //如果主键不是自增或不是数字类型的,需要将这个属性设置成false,默认为true,注意,这个属性的修饰符是public

4.protected $keyType = 'string'    //如果主键不是整数,则需要加上将这个属性设置成string

5.public $timestamps = false       //laravel默认会操作created_at(添加时间)和updated_at(修改时间),如果你的数据表中没有这两个字段的话,就需要把这个属性设置成false,注意,这个属性的修饰符也是public

6.protected $fillable = []              //允许写入的字段,这是个数字索引数组,里面的键值就是允许写入的字段名,这个数组要是空的话,就说明这张表无法通过模型类添加数据

7.protected $guarded = []           //不允许写入的字段,同上,也是个数字索引数组,里面的键值就是不允许写入的字段名,这个数组要是空的话,就说明这张表的所有字段都可以写入

(4)获取多条:get()/all() 用法和DB类一致

    参数:无
    返回值:对象
    写法:$data = IndexModel::get();     ||    $data = IndexModel::all();

(5)获取一条:first()/find() 用法和DB类一致

    find()参数:数字,会默认根据模型类的primaryKey指向的字段作为条件查询(与TP一致)
    first()参数:索引数组,first()也可以传入索引数组,数组键值为字段名,表示要查询的字段,不填默认全部查询
    写法:$data = IndexModel::find(1);   ||   $data = IndexModel::where('id',1)->first(['username','password']);

(6)分块查询:chunk() 用法和DB类一致

    参数:一参是数字,代表一块有多少条,二参为回调函数,回调函数的参数是当前块的数据,可以在回调函数中对当前块的数据进行处理
    写法:$data = IndexModel::chunk(100,function ($query) { foreach ($query as $v) {...} });

(7)游标查询:cursor() 使用游标的方式查询数据库,获取的结果循环出来和正常的get()获取没有区别,但是它在处理大量数据时可以大大减少内存使用量

    参数:无
    写法:$data = IndexModel::cursor();

(8)findOr():表示单条获取或者…

    参数:参数是匿名函数,表示如果没查询到的话可以在匿名函数中做其他操作
    写法:$data = IndexModel::findOr(function () {...});

(9)findOrFail:在未找到模型时抛出异常

    参数:数字,与find相同
    写法:$data = IndexModel::findOrFail(1);
    注:find和findOrFail都可以搭配where条件

(10)新增:

同TP一样,新增也需要先实例化对象,但是laravel中的新增流程是先实例化对象,然后给对象设置属性,然后调用save方法
    避坑:假如说你的表中有如下字段username,password这两个,那么就需要这样写:$obj = new IndexModel();
                                                                                                                            $obj->username = $data['username'];   //$data就是你表单提交过来的需要新增的数据数组
                                                                                                                            $obj->password = $data['password'];
                                                                                                                            $obj->save();
            
              这种写法可以应付字段少的时候,但大多数数据表中的字段都很多,所以这种方法并不方便,所以当字段比较多的时候可以这样写:$obj = new IndexModel();
                                                                                                                                                                                                        $obj->fill($data)->save();
    静态新增:create();
    参数:一维数组,键名为你要插入的字段名,键值为要插入的值(说白了就是表单提交的数据)
    写法:$rt = IndexModel::create($data);
    返回值:对象(当前模型)
    注:执行新增修改时都要去设置$fillable或$guarded,两个不能同时设置。新增会自动操作created_at和updated_at,如果不需要新增时间和修改时间字段,则必须将$timestamps属性设置成false

    查找并新增1:firstOrCreate(),去查找指定数据,如果数据不存在则新增一条新数据到数据库
    参数:一参为一个关联数组,作用是作为查找条件,键名是字段名,键值是字段值,二参也是一个关联数组,键名是要添加的字段名,键值是要添加的值
    写法:$data = IndexModel::firstOrCreate(['username'=>'小明'],['username'=>'小明','password'=>'admin']);   //意思就是查找一个username是小明的数据,如果没有就插入一个username是小明,password是admin的数据
    返回值:对象(当前模型)

    查找并新增2:firstOrNew(),同firstOrCreate(),只不过firstOrCreate()如果没有查到则直接像数据库中插入数据,而firstOrNew()则需要save()一下才会将数据插入数据库

(11)更新:

更新用的也是save()方法,流程也同TP一样,需要先获取查询到你要修改的数据,通过返回的对象->fill($data)->save()执行修改
批量更新:update()方法,可以根据条件进行批量更新(满足条件的都会被更新)   IndexModel::whereIn('id',[1,2,3,4,5])->update($data);
更新并新增:updateOrCreate(),用法同数据库相同,一参是要查询的条件,二参是如果没有查到则要新增的数据

(12)删除:

	  可以通过条件删除,也可以find()查询后调用删除方法删除,也可以主键删除
      删除模型:通过find()查询到之后调用删除方法
      写法:$obj = IndexModel::find(1);   $obj->delete();
      返回值:true/false

      主键删除:通过传入主键进行删除,支持传入多个id进行多条删除
      参数:数字或数组,1 || [1,2,3]
      写法:IndexModel::destroy(1);
      返回值:影响行数

      条件删除:where条件删除
      写法:$rt = IndexModel::whereIn('id',[1,2,3])->delete();
      返回值:影响行数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值