Laravel ORM的理解与CURD和一些常用的方法(多表联查)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Wild_sir/article/details/102626096

laravel Eloquent ORM 文档:https://learnku.com/docs/laravel/5.7/eloquent/2294

  1. 什么是ORM?

ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 业务对象时,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法即可。

ORM 两种最常见的实现方式是 ActiveRecord 和 DataMapper

ActiveRecord(非常流行) 中模型与数据表一一对应,

DataMapper 中模型与数据表是完全分离的。

Laravel 的 Eloquent ORM 使用 ActiveRecord 实现方式,每一个 Eloquent 模型类对应着数据库中的一张表,我们通过调用模型类的相应方法实现对数据库的增删改查。

由于 Eloquent 模型是查询构造器,你可在 Eloquent 查找中使用查询构造器的任何方法。

  1. 简单的来说

就是laravel框架内提供的一个实体关系映射框架(ORM),名字叫eloquent
是一个用于关系型数据库实体关系映射的组件,laravel内置的,可以以操作对象的方式操作数据库的数据变更和查询

以上的内容估计您也能对ORM进行一个了解了

与数据库的映射关系

    类名 <------------> 表名

    属性 <------------>字段

	属性的约束 <--------->字段的类型

	实例对象 <-------> 表记录

上面的白话是借鉴他的点击这里查看

  1. 简单总结一下orm操作数据库的方法

拿users表来说(User是model)

  User::find(1)    查找单条数据
  User::all()        查找所有数据
  User::find(1)->delete()    删除单条数据
  User::destory(array(1,2,3))    删除单条或多条数据
  User::save()        保存数据(我一般修改都用他)
  
  也可以增加修改放一个接口用它:
  $user= new User();
  $user->fill($data)->save();
  
  User::first()        取第一条数据
  User::where('name', '=', '***')->update(array('pwd' => '**')); 指定查询条件,更新数据
  User::truncate()    清空数据表,危险操作
  User::where('name', '=', '**')->get(array('id','pwd'));    配合查询条件获取多条数据
  User::pluck('name');            返回表中该字段的第一条记录(这个确实很好用)
  User::lists('name');                返回一列数据
  User::where('name', '=', '***')->toSql();     获取查询的sql语句,仅用于条件,不能用户带get()之类的带查询结果的查询中(我一般打印sql的时候用的是:DB::connection()->enableQueryLog();  // 开启QueryLog,最后写dd(DB::getQueryLog());查看这样我感觉全部sql都有也方便)
 
 条件查询的方法很多比如:

 1.最普通的条件查询 User::where('字段名','查询字符','限制条件')     例:User::where('name', 'LIKE', '%...%').

 2.多条件查询,使用多个where  User::where('name', 'LIKE', '...%')->where('pwd', '=', '123')->get();或查询操作使用orWhere(),使用方法通where.

 3.直接用sql语句写查询条件    User::whereRaw('name= ? and pwdLIKE ?', array('123', '%...%')).

 4.其他查询方法:
whereIn()whereBetween()whereNested()子查询,orWhereNested()whereNotIn()whereNull(),whereNotNull()

 5.快捷方式  whereName('123')  查询'name' = '123'的数据,默认系统无此方法需要字段定义在model上(如:照片图1),name为字段名称

 6.结果排序:
    使用order关键字:
     User::where('name', '=', '123')->orderBy('id')->get();   默认asc(正序)
    orderBy('id', 'desc')(倒叙)

    限制结果数量
     take()方法
     User::take(2)->get();                          //select * from `users` limit 2

    指定偏移
      User::take(2)->skip(2)->get();        //select * from `users` limit 2 offset 2
 7.分页:
 	User::where('name','=','123')->paginate(3) //每页显示5条
 8.倆表或者多表联查(要有关联在能查)
 	模型关联这里放这自己看:(https://learnku.com/docs/laravel/6.x/eloquent-relationships/5177)
 	public function a()
	{
    return $this->belongsTo('App\Models\a', 'user_id','id');
	}
	public function b()
	{
    return $this->belongsTo('App\Models\b', 'a_id','aid');
	}
	$model = $this->whereHas('a', function ($query) use ($search) {
    $query->orwhere('name', 'like', '%' . $search['name'] . '%');
	})->whereHas('b', function ($query) use ($search) {
    $query->orwhere('p_phone', 'like', '%' . $search['name'] . '%');
	})->paginate(3);//这个呢就是一个输入框里面输入手机号啊姓名啊都成查到所以用orwhere
	
	详情的话就简单了:
	public function show(User $user)
	{
		$user->a->b;
		return $user;这就关联好了全部查处
	}
	
	基本上就这样以后在补点

图1:
图1

猜你喜欢

转载自blog.csdn.net/Wild_sir/article/details/102626096