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;(动态属性的方式)
多对多: