laravel傻瓜手册7(软删除,模型关联)

1.软删除:

软删除可以理解为修改而非真正的删除,数据库中会有一个字段(delete_at),
如果这个字段为空,则说明这条记录没被软删除,否则说明这条记录已经被软删除,
而查询的时候只查询这个字段为空的记录
    命名空间:Illuminate\Database\Eloquent\SoftDeletes(
    软删除是一个trait,所以需要在模型中use SoftDeletes;)
    使用方法:模型类命名空间下:use Illuminate\Database\Eloquent\SoftDeletes;  
    模型类内第一行:use SoftDeletes; 
    删除数据:$obj = IndexModel::find($id);  $obj->delete();
    查询所有数据(包含被软删除的数据):withTrashed()
            写法:$data = IndexModel::withTrashed()->get();
    只查询所有被软删除的数据:onlyTrashed()
            写法:$data = IndexModel::onlyTrashed()->get();
    恢复被软删除的数据:restore()
            写法:$data = IndexModel::onlyTrashed()->get();
                      foreach ($data as $v) {
                            $v->restore();
                      }
             返回值:true/false
    永久删除:forceDelete()
            写法:$data = IndexModel::onlyTrashed()->find(1);
         $data->forceDelete();
            返回值:true/false

2.模型关联:相当于自动连表

    一对一:一个用户对应一个身份证号
        应用:首先建立用户表,字段为id,username,tel,再建立身份证表,字段id,idcard,userid(id,身份证号,用户id)。
                  表建立完成之后,再建立对应模型类UserModel,CardModel
                  在用户表中定义关联模型方法:public function card () {
                                                                     //hasOne();一对一模型关联方法
                                                                     //参数:一参是对应关联的模型命名空间,二参是作为链接条件的其他表中的外键名(需要用主键去对应的字段)
                                                                     return $this->hasOne('App\Models\CardModel','userid');
                                                               }
                  控制器中使用:$data = UserModel::find(1)->card;  查询结果就是id为1的用户的身份证表的数据
                  以上为正向关联,同理,也会遇到通过身份证号去找用户信息的场景,就需要进行反向关联
                  在身份证表中定义反向关联模型方法:public function user () {
                                                                              //belongsTo();一对一模型反向关联方法
                                                                              //参数:一参是对应反向关联的模型明明那个空间,二参是作为链接条件的外键名(反向关联就是用自己表中的其他表的外键去对应其他表的主键)
                                                                              return $this->belongsTo('App\Models\UserModel','userid');
                                                                        }
                  控制器中使用:$data = CardModel::find(1)->user;  查询结果就是id为1的身份证的用户表中数据
    一对多:一个用户对应多条留言
        应用:用户表,字段名同上,留言表,字段id,content,userid(id,留言内容,用户id)
                  对应模型类:UserModel,CommentModel
                  在用户表中定义关联模型方法:public function comment () {
                                                                     //hasMany();一对多模型关联方法,参数同hasOne();
                                                                     return hasMany('App/Model/CommentModel');
                                                               }
                  控制器中使用:$data = UserModel::find(1)->comment;  查询结果就是id为1的用户所有的留言信息
                                         foreach ($data as $v) {
                                               ...
                                         }
                  注:因为留言可能是多条,有一些留言可能不想要获取,所以可以添加where条件  $data = UserModel::find(1)->comment()->where('id',1)->first();  ||  $data = UserModel::find(1)->comment()->whereIn('id',[1,2])->get();
                         加入where条件时,comment要写成方法:comment();
                  反向关联(找到这个留言对应的用户信息)
                  在留言模型类中定义反向关联模型方法:public function user () {
                                                                                  //belongsTo();一对一模型反向关联方法
                                                                                  //参数:一参是对应反向关联的模型明明那个空间,二参是作为链接条件的外键名(反向关联就是用自己表中的其他表的外键去对应其他表的主键)
                                                                                  return $this->belongsTo('App\Models\UserModel','userid');
                                                                            }
                  控制器中使用:$data = CommentModel::find(1)->user;  查询结果就是id为1的身份证的用户表中数据
                  注:因为留言对用户的关系是多个留言对一个用户,所以在通过留言查用户信息是可以快捷查询,如只想要发布这个留言的用户姓名,不需要其他的,就可以这样写:$data = CommentModel::find(1)->user->username;(动态属性的方式)
      多对多:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值