您的位置:首页 > 编程语言 > PHP开发

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: