Laravel学习过程之基础知识学习和使用(三)
(四)、数据库操作之-Eloquent ORM
1. Eloquent ORM简介、模型的建立及查询数据
l Eloquent ORM简介
Ø Laravel所自带的Eloquent ORM是一个优美、简洁的ActiveRecord实现,用来实现数据库操作;
Ø 每个数据表都有一个与之对应的“模型(Model)”用于和数据表交互。
l 模型的建立
Ø 在目录APP下建立Student模型(student表的模型)文件Student.php:
<?php
namespaceApp;
useIlluminate\Database\Eloquent\Model;
classStudent extends Model
{
// 指定表名
protected $table = 'student';
// 指定主键
protected $primaryKey = 'id';
}
Ø 在目录App/Http/Controllers/的StudentController.php文件中创建函数queryE方法用于操作EloquentORM构造器相关内容
publicfunction queryE(){
}
注意:在queryE方法中使用Student(student表)模型的时候,要记得引用类路径:
use App\Student;
在目录App/Http下的routes.php增加一条路由:
Route::any('queryE', ['uses' => 'StudentController@queryE']);
l Eloquent ORM模型中的查询
Ø all()、find()、findOrFail()
all()查询:查询数据表的所有数据;
在StudentController.php控制器文件的queryE方法中写如下代码,用于all()查询:
$students = Student::all();
echo "<pre>";
var_dump($students);
结果:find()查询:查询数据表的某(几)条数据;
在StudentController.php控制器文件的queryE方法中写如下代码,用于find()查询:
$student = Student::find('1');
echo "<pre>";
var_dump($students);
结果:
findOrFail()查询:根据主键查找,若未找到则抛出异常;
在StudentController.php控制器文件的queryE方法中写如下代码,用于find()查询:
$student = Student::findOrFail('100');
echo "<pre>";
var_dump($students);
结果:
Ø 查询构造器在ORM中的使用
在StudentController.php控制器文件的queryE方法中写如下代码,用于find()查询:
$students= Student::get();
echo"<pre>";
var_dump($students);
结果:
有条件且排序的查询第一条:
$student= Student::where('id', '>', '1')->orderBy('age', 'desc')->first();
echo"<pre>";
var_dump($student);
结果:
chunk()查询:
echo "<pre>";
Student::chunk(2, function ($students){
var_dump($students);
});
结果:
聚合函数的使用:
queryE方法中添加如下代码:
$num= Student::count();
$max = Student::max('age');
$min = Student::min('age');
$avg = Student::avg('age');
echo "总记录数:".$num.";最大值:".$max.";最小值:".$min.";平均值:".$avg."<br>";
结果:
2. Eloquent ORM中新增、自定义时间戳及批量赋值的使用
l 通过模型新增数据(涉及到自定义时间戳)
由于涉及到自定义时间戳,所以在Student.php的模型(student表)文件中添加如下代码控制时间戳:
protected$timestamps = true;
public function getDateFormat()
{
return time();
}
在StudentController.php文件的queryE方法中添加如下代码,以新增数据到数据表:
$student= New Student();
$student -> name = 'sun';
$student -> age = '17';
$bool = $student -> save();
echo "<pre>";
var_dump($bool);
结果:
student数据表新增数据成功:
由于以上设置新增的数据时间是时间戳,但是取出的却是已经格式化好的时间,若依然想用时间戳显示查找结果,需要在Student.php模型(student表)文件中增加如下方法:
protectedfunction asDateTime($value)
{
return $value;
}
注意:
有时候可能会发现格式化后的日期时间与当前时间不符,那是因为时区没有设置正确,设置方式如下:
在目录config下的app.php文件中找到
'timezone' => 'UTC'自改为:'timezone' => 'PRC'即可。
l 使用模型的Create方法新增数据(涉及到批量赋值)
要使用create方法新增数据,涉及到批量赋值,需要在Student.php模型(student表)文件中添加如下代码:
protected $fillable = ['name', 'age'];
在StudentController.php文件的queryE方法中添加如下代码,使用create方法新增数据:
$student= Student::create(['name' => 'sunlifang', 'age' => '20']);
echo"<pre>";
var_dump($student);
结果:
数据表新增数据:
同时,也可以执行不允许批量赋值的字段:
在Student.php模型(student表)文件中添加如下代码:
protected $guarded = [];
l 另外两种新增数据的方法
第一种:firstOrCreate(),执行属性(条件)查询,如有记录则显示,如没有记录则新增该字段作为一条记录。
queryE方法中添加如下内容:
$student= Student::firstOrCreate(['name' => 'sunlifang']);
echo"<pre>";
var_dump($student);
有记录,则显示,结果:
没记录则新增记录,结果:
数据表新增了一条’name’为’张三’的记录:
第二种:firstOrNew(),执行属性(条件)查询,如有记录则显示,如没有记录则实例化该字段,如需保存到数据表,则调用save()方法新增一条记录。
queryE方法中添加如下内容:
$student= Student::firstOrNew(['name' => '李四']);
$bool =$student -> save();
echo"<pre>";
var_dump($bool);
有记录,则显示:
没记录,则调用save()方法保存到数据表:
数据表新增一条字段’name’值为’李四’的记录:
3. 使用Eloquent ORM修改数据
l 通过模型更新
在queryE方法中添加如下代码:
$student= Student::find(7);
$student-> name = "Kitty";
$bool =$student -> save();
echo"<pre>";
var_dump($bool);
结果:
数据表中id=7的记录名字更新为Kitty:
l 结合查询语句批量更新
在queryE方法中添加如下代码:
$num = Student::where('id','>', '6')->update(['age'=>'25']);
echo $num;
结果:
数据表id>6的age都更新为25:
4. 使用Eloquent ORM删除数据
l 通过模型删除
在queryE方法中添加如下内容:
$student= Student::find(9);
$bool = $student->delete();
echo "<pre>";
var_dump($bool);
结果:
数据表中id=9的记录被删除:
l 通过主键值删除
在queryE方法中添加如下内容:
$num =Student::destroy(8);
echo"<pre>";
var_dump($num);
结果:
数据表中id=8的记录被删除:
同时,该方法也可以删除多条记录:
$num =Student::destroy(6,7);
$num =Student::destroy([6,7]);
l 根据指定条件删除
在queryE方法中添加如下内容:
$num =Student::where('id', '>', '5')->delete();
echo"<pre>";
var_dump($num);
结果:
数据表中id>5的记录被删除:
Blade模板引擎
1. Blade模板引擎简介及模板继承的使用
l Blade模板引擎简介
Ø Blade是Laravel提供的一个既简单又强大的模板引擎;
Ø 和其他流行的PHP模板引擎不一样,Blade并不限制你在视图(view)中使用原生的PHP代码;
Ø 所有Blade视图页面都将被编译起来成原生PHP代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。
l 模板继承
Ø section
Ø yield
Ø extends
Ø parent
l 为什么要使用模板继承
2. 基础语法及include的使用
l 模板中输出变量
l 模板中调用PHP代码
l 原样输出
l 模板中的注释
l 引用子视图include的使用
3. 流程控制
l if
l unless
l for
l foreach
4. 模板中的URL
l url()
l action()
l route()
至此,Laravel框架的基础知识,就已经总结完成,视频参考慕课网(轻松学会Laravel-基础篇http://www.imooc.com/learn/697)。
下一篇将介绍Laravel框架中表单的使用,敬请期待!
****************************只要思想不滑坡,办法总比困难多****************************