Laravel入门教程(五)- 数据库操作 - Eloquent ORM
2017-11-23 10:01
831 查看
1. Eloquent ORM简介及查询数据
1.1. Eloquent ORM简介
ActiveRecord实现ActiveRecord:
1.2. 创建模型并关联数据库表
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { // 指定表名,默认是Student的复数 protected $table = 'student'; // 指定id protected $primaryKey = 'id'; }
1.3. 查询数据
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm1() { // 查看Student表所有的信息 $student = Student::all(); dd($student); // 查看Student表中id=1001对应的数据,找不到返回NULL $student = Student::find(2001); dd($student); // 查看Student表中id=2001对应的数据,找不到出错 $student = Student::findOrFail(1001); dd($student); // 查看表的所有记录 $student = Student::get(); dd($student); // 排序,条件,取第一个 $student = Student::where('id', '>', '1001') ->orderBy('age', 'DESC') ->first(); dd($student); // 使用chunk Student::chunk(2, function($students){ var_dump($students); }); // 聚合函数 $qty = Student::count(); dd($qty); } }
2. ORM中新增数据
通过模型新增数据(涉及到自定义时间戳)使用模型的Create方法新增数据(涉及到批量赋值)
2.1. 通过模型来新建记录
在Controller中,设置:<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm2() { // 通过模型来新建记录 $student = new Student(); $student->name = 'Belle'; $student->age = 18; $bool = $student->save(); dd($bool); $student = Student::find(1009); echo $student->created_at; // 显示: 1489460962(需要设置:asDateTime) } }
在Model中设置:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { // ... 省略了部分代码 // 自动维护时间戳(timestamp) public $timestamps = TRUE; // FALSE 不维护时间戳| TRUE 维护 protected function getDateFormat(){ return time(); } // 如果需要显示的是时间戳 protected function asDateTime($val) { return $val; } }
2.2. 使用模型的Create方法
Controller中设置:<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm2() { // 使用模型的Create方法来新增数据 // 如果不设置模型的$fillable,会抛出MassAssignmentException异常 $student = Student::create([ 'name' => 'Candy', 'age' => 18]); dd($student); } }
Model中设置:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { // ... 省略了部分代码 // 指定允许批量赋值的字段 protected $fillable = ['name', 'age']; // 指定不允许批量赋值的字段 protected $guarded = []; }
2.3. firstOrCreate方法
特别适合的情况就是新增的同时保证不会出现重复<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm2() { // firstOrCreate() $student = Student::firstOrCreate( ['name' => 'Elsa'] ); dd($student); } }
2.4. firstOrNew方法
firstOrNew()与firstOrCreate()的区别是:firstOrNew不会自动保存到数据库。需要手动调用save()方法来保存。<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm2() { // firstOrNew() // firstOrNew()与firstOrCreate()的区别是:firstOrNew不会自动保存到数据库 // 需要手动调用save()方法来保存 $student = Student::firstOrNew( ['name' => 'Linda'] ); $bool = $student->save(); dd($bool); } }
3. 更新数据
3.1. 利用模型更新数据
在Controller中更改,最后用save()保存<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm3() { // 通过模型更新数据 $student = Student::find(1010); $student->name = 'Cindy'; $bool = $student->save(); // updated_at也会改变 } }
TODO: 如何设置要更新的时间戳字段?
3.2. 利用update()函数
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm3() { // 使用update()函数批量更新 $qty = Student::where('id', '>', 1011)->update(['age'=>21]); var_dump($qty); } }
4. 删除数据
4.1. 通过模型删除数据
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm3() { // 通过模型删除 $student = Student::find(1009); $bool = $student->delete(); var_dump($bool); } }
4.2. 通过主键删除
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm3() { // 通过主键删除 $qty = Student::destroy([1010, 1012]); var_dump($qty); } }
4.3. 指定条件删除
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use App\Student; class StudentController extends Controller { public function orm3() { // 指定条件删除 $qty = Student::where('id', '>' , '1010')->delete(); var_dump($qty); } }
相关文章推荐
- Laravel数据库操作之-Eloquent ORM
- Laravel入门教程(四)- 数据库操作之 - 查询构造器
- Laravel入门教程(三)- 数据库操作 DB facade
- gorose, 最像 laravel's eloquent 的go数据库操作orm, 风骚的链式调用, 让你深深陷入不能自拔
- gorose, 最像 laravel's eloquent 的go数据库操作orm, 风骚的链式调用, 让你深深陷入不能自拔
- Laravel学习笔记(六)---操作数据库--Eloquent ORM(对象关系映射)
- Laravel 5系列教程四:数据库和Eloquent
- FLASH与ASP通信入门教程(四) ASP操作数据库入门
- Laravel 数据库操作 Eloquent——1
- Android高性能ORM数据库DBFlow入门教程
- [李景山php]每天laravel[017]-laravel 中级任务--小白教程----实际操作-创建基础任务 to-do-list 案例 ---准备数据库
- Android高性能ORM数据库DBFlow入门教程
- [django]入门教程4:操作数据库
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- PHP Lumen - 入门教程 - 操作数据库
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- Django入门4: ORM 数据库操作
- Python入门学习教程:数据库操作,连接MySql数据库