一、Eloquent简介
Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库进行交互。
每个数据库表都有一个对应的「模型」可用来跟数据表进行交互。你可以通过模型查询数据表内的数据,以及将记录添加到数据表中。
二、定义模型
模型文件默认放在 app 目录下,打开该目录,可以看到 Laravel 默认生成的用户模型 user.php ,打开这个文件。
user.php
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
use Authenticatable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name', 'email', 'password'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
}
protected $table = 'users'; 设置了数据表的名称。
protected $fillable = ['name', 'email', 'password']; 设置了可以更新的字段。
protected $hidden = ['password', 'remember_token']; 设置了哪些字段会被隐藏。
三、创建模型
我们也可以创建一个新的模型,例如使用 artisan 创建一个 Article 模型:
cd ~/Code/myweb
php artisan make:model Article
打开 app 目录即可看到我们创建的 Article 模型文件。
四、数据读取
一旦你创建并关联了一个模型到数据表上,那么你就可以从数据库中获取数据。
可以把每个 Eloquent 模型想像成强大的查询构造器,它让你可以流畅地查询与模型关联的数据表。
比如下面这段代码可以取出 users 数据表中的所有数据。
<?php
use App\User;
$users = App\User::all();
foreach ($users as $user) {
echo $user->name;
}
或者用下面这段代码来对数据进行筛选,来选出 users 表中 active 字段为 1,的数据并且按照 age 倒序排列,然后取出前十条。
$users = App\User::where('active', 1)
->orderBy('age', 'desc')
->take(10)
->get();
当然了,你也可以通过 find() 和 first() 方法来取回单条记录。
// 通过主键取回一个模型...
$flight = App\Flight::find(1);
// 取回符合查询限制的第一个模型 ...
$flight = App\Flight::where('active', 1)->first();
你也可以用主键的集合为参数调用 find 方法,它将返回符合条件的集合:
$flights = App\Flight::find([1, 2, 3]);
有时你可能希望在找不到数据时抛出一个异常,这在路由或是控制器内特别有用。
findOrFail() 以及 firstOrFail() 方法会取回查询的第一个结果。如果没有找到相应结果,则会抛出一个异常:
$model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();
五、数据添加
要在数据库中创建一条新记录,只需创建一个新模型实例,并在模型上设置属性和调用 save 方法即可:
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class FlightController extends Controller
{
/**
* 创建一个新的用户实例。
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// 验证请求...
$user = new User;
$user->name = $request->name;
$user->save();
}
}
在这个例子中,我们把来自 HTTP 请求中的 name 参数简单地指定给 App\User 模型实例的 name 属性。
当我们调用 save() 方法,就会添加一条记录到数据库中。
当 save() 方法被调用时,created_at 以及 updated_at 时间戳将会被自动设置,因此我们不需要去手动设置它们。
六、数据更新
save() 方法也可以用于更新数据库中已经存在的模型。
要更新模型,则须先取回模型,再设置任何你希望更新的属性,接着调用 save() 方法就可以了。
$user = App\User::find(1);
$user->name = 'New User Name';
$user->save();
七、数据删除
在模型实例上调用 delete() 方法来删除数据:
$user = App\User::find(1);
$user->delete();
在上面的例子中,我们在调用 delete 方法之前会先从数据库中取回了这个模型。
我们也可以不用取回直接删除它
直接删除,使用 destroy() 方法:
App\User::destroy(1);
App\User::destroy([1, 2, 3]);
App\User::destroy(1, 2, 3);
通过查询来删除模型
当然了,你也可以删除某些满足条件的数据,例如我们删除所有被标为不活跃的用户:
$deletedRows = App\User::where('active', 0)->delete();
八、Tinker
通过上述知识的学习,你应该对 Eloquent ORM 模型 有了一定的了解,但是要想熟练掌握,总要实际操作一下才行。
Laravel 内置了一个小工具可以用来快速调试数据库的数据 php artisan tinker。
Laravel artisan 的 tinker 是一个 REPL (read-eval-print-loop),REPL 是指 交互式命令行界面,它可以让你输入一段代码去执行,并把执行结果直接打印到命令行界面里。
接下来我们就使用 Tinker 来实际联系一下数据操作:
1.首先要配置一下数据库
(保存环境的同学可跳过这一步)根据上次实验学过的知识快速完成配置
sudo service mysql start
mysql -u root -p
create database myweb;
.env文件
DB_HOST=localhost
DB_DATABASE=myweb
DB_USERNAME=root
DB_PASSWORD=
2.然后执行迁移生成数据表
cd ~/Code/myweb
php artisan migrate
3.使用 artisan 打开 tinker
php artisan tinker
4.添加一个用户
$user = new App\User;
$user -> name = 'SadCreeper';
$user -> email = '12345@qq.com';
$user -> password = 'password';
$user -> save();
5.查看用户信息
App\User::find(1);
6.更新用户信息
$user = App\User::find(1);
$user->name = 'HappyCreeper';
$user->save();
7.删除用户信息
App\User::destroy(1);
App\User::find(1);
九、小结
通过本次实验,我们了解了 Laravel 是如何对数据进行基本操作的。在实际的开发中,数据操作将会更加复杂,包括非常重要的 Eloquent 模型间关系。
作为一个基础教程,我省去了一些对于新手不易理解的内容,来最大化降低学习门槛,更多的 Eloquent 模型操作
参考:实验楼