数据库操作之-Eloquent ORM
ORM一般指对象关系映射。对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping)
Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。
private 是完全私有的,只有当前类中的成员能访问到.
protected 是受保护的,只有当前类的成员与继承该类的类才能访问
1、Eloquent ORM简介
Eloquent ORM是一个优美、简介的ActiveRecord实现,用来实现数据库操作
每个数据表都有一个与之相对应的“模型Model” 用于和数据表交互。
2、 模型的建立
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
//指定表名
protected $table='student';
//指定主键
protected $primaryKey='id';
}
3、查询数据
all()、find()、findOrFail()
查询构造器在ORM中的使用
public function orm1(){
//查询表的所有记录
$student = Student::all();
//查询id为5的记录
$student=Student::find(5);
//根据主键查找,如果没有查找抛出异常,报错
$student=Student::findOrFail(2);
//查询所有的
$student = Student::get();
//where
$student=Student::where('id','>',4)
->orderBy('age','desc')
->first();
// dd($student);
//每次查2条
echo '<pre>';
//<pre>标签用于定义预先排版的文本。<pre>元素里的文本是用定宽字体显示的,而且会保留空格和换行。
Student::chunk(2,function($student){
var_dump($student);
});
//聚合函数
$student=Student::count();
$student=Student::sum('age');
$student=Student::where('id','>',4)->max('age');
$student=Student::min('age');
$student=Student::avg('age');
var_dump($student);
}
4、 Eloquent ORM中新增数据
通过模型新增数据(涉及到自定义时间戳)
使用模型新增数据
$student=new Student();
$student->name='lcy5';
$student->age=55;
$bool=$student->save(); //保存数据
var_dump($bool);
}
$student = Student::find(14);
echo $student->created_at;
echo date('Y-m-d H:i:s',$student->created_at);
}
class Student extends Model:
public $timestamps=true;//自动维护时间戳
//格式化时间
protected function getDateFormat()
{
return time();
}
//不让时间戳格式化
protected function asDateTime($val)
{
return $val;
}
使用模型的Create方法新增数据(涉及到批量赋值)
//使用模型的create方法新增数据,设计到批量增加
// $student = Student::create(['name' => 'lcy', 'age' => 18]);
// dd($student);
//以属性查找用户,若没有则新增,并取得新的实例
// $student=Student::firstOrCreate(
// ['name'=>'lgy']
// );
//
// dd($student);
$student=Student::firstOrNew(
['name'=>'qyz']
);
$bool=$student->save();
var_dump($bool);
//以属性查找用户,若没有则新增,并取得新的实例.如果要保存使用
class Student extends Model:
//指定允许批量赋值的字段
protected $fillable=['name','age'];
//指定不允许批量赋值的字段
protected $guarded =[];
5、使用Eloquent ORM修改数据
通过模型更新
// //通过模型更新数据
// $student = Student::find(10);
// $student->name='kitty';
// $bool = $student->save();
// dd($bool);
//结合where批量更新
结合查询语句批量更新
$num=Student::where('id','>',10)->update(
['age'=>41]
);
var_dump($num);
6、使用Eloquent ORM删除数据
通过模型删除
//通过模型删除
// $student=Student::find(17)
// ->delete();
// var_dump($student);
通过主键删除
//通过主键删除
// $student=Student::destroy(12);
// $student=Student::destroy(8,9);
// $student=Student::destroy([8,9]);//同上
//下面自己想的可以忽略
// $student=Student::findOrFail(15)->delete();
// var_dump($student);
根据指定条件删除
//根据指定条件删除
// $student=Student::where('id','>',12)->delete();
var_dump($student);
}
Blade模板引擎简介及模板继承的使用
1、Blade模板引擎简介及模板继承的使用
- 简介
他是模板引擎
不限制在视图中使用原生PHP代码
视图页面编译成原生PHP代码缓存起来了,除非你的模板文件被修改
- 模板继承
1、@section
父模板(默认内容):
@section(‘content’)
默认的内容
@show
子模板:(layout.blade.php)
@extend(‘layouts’)
@section(‘content’)
@parent(拓展/继承父类)
新的内容
@stop
2、@yield
父模板:
@yield(‘title’,‘默认标题’)
子模板:
@section(‘title’)
//@parent就算写了也不显示
新的内容
@stop
@section和@yield的区别:
@section默认的内容和扩展的内容
@yield默认的标题或者新的标题
3、@extends
@extend(‘layouts’) //(layout.blade.php)
4、@parent //默认内容
5、@override //重写
6、@append //新增
@override和@append的区别:
@section(‘content’)
加一行内容:
@append
@section(‘content’)
再加一行内容:
@append
@section(‘content’)
可以了可以了:
@stop
@section(‘content’)
都不要了,我说的:
@override
输出结果:都不要了,我说的:
2、基础语法及include的使用
public function section1(){
$name='sean';
$arr=['sean','imooc'];
return view('student.section1',[
'name'=>$name,
'arr'=>$arr,
]);
}
- 模板中输出变量
<p>{{$name}}</p>
- 模板中调用php代码
<p>{{time()}}</p>
<p>{{date('Y-m-d H-i-s')}}</p>
- 原样输出
<p>@{{$name}}</p>
- 模板的注释
{{--模板的注释--}}
- 引入子视图include的使用
@include('student.common1',['message'=>"wozhenkeai"])
3、流程控制
public function section1(){
$students=Student::get();
$name='sean';
$arr=['sean','imoocc'];
return view('student.section1',[
'name'=>$name,
'arr'=>$arr,
'students'=>$students,
//{"id":4,"name":"lzy","age":41,"updated_at":0,"created_at":null}
]);
}
- if
@if($name='sean')
i am sean
@elseif($name='iimooc')
i am sean
@else
who is i?
@endif
<br>
@if(in_array($name,$arr))
ture
@else
false
@endif
- unless
{{--if的取反--}}
@unless($name=='ic')
i am not iimooc
@endunless
- for
{{--@for($i=0;$i<5;$i++)--}}
{{--<p>{{$i}}</p>--}}
{{--@endfor--}}
- foreach
{{--@foreach($students as $student)--}}
{{--<p>{{ $student->name}}</p>--}}
{{--第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。--}}
{{--@endforeach--}}
- forelse
@forelse($students as $student)
<p>{{$student->name}}</p>
@empty
<p>null</p>
@endforelse
模板中的 URL
1.
public function urlTest(){
return 'urlTest';
}
`Route::any('url',['uses'=>'StudentController@urlTest','as'=>'url']);`
url()通过路由的名称生成url
<a href="{{url('url')}}">url()</a>
action()指定控制器及方法名生成url
<a href="{{action('StudentController@urlTest')}}">action()</a>
route()路由的别名
<a href="{{route('url')}}">route()</a>