laravel 5.5入门系列——9

读laravel手册——Eloquent模型笔记1


    • 默认的约定

    • 检索

    • 集合Collection

    • 插入

    • 更新

    • 删除

    • 数据表名称 table

    • 数据表主键 primaryKey

    • 时间戳

    • 更改数据库连接

    • 批量更新

    • 读laravel手册Eloquent模型笔记1

默认的约定

一个Flight模型类,将会从flights数据表中检索和存储信息

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Flight extends Model{
    //}1234567

数据表名称 $table

如果没有指定,则默认使用类的复数形式作为表名.这是可以修改的:

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Flight extends Model{
    //
    protected $table = 'my_flights';
}12345678

数据表主键 $primaryKey

如果没有指定,Eloquent假定每一个数据表都有一个名为id的主键字段,并且假定主键是一个递增的整数值。如果使用的是非递增或者非数字的主键,则必须在模型上设置 public $incrementing = false。如果主键不是一个整数,则应该在模型上设置 protected $keyType = string。

时间戳

Eloquent 会默认数据表中存在 created_at 和 updated_at 这两个字段。如果你不需要这两个字段,则需要在模型内将 $timestamps 属性设置为 false.时间戳在数据库中的存储方式可以由$dataFormat字段定义

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;class Flight extends Model{    /**
     * 该模型是否被自动维护时间戳
     *
     * @var bool
     */
    public $timestamps = false;
}123456789101112131415

更改数据库连接

修改protected $connection 字段: 
protected $connection = 'connection-name';


检索

Eloquent模型是一个强大的查询构造器,它让你可以流畅地查询与该模型相关联的数据库表。Eloquent 的 all 方法会返回模型表中所有的结果。由于每个 Eloquent 模型都可以当作一个 查询构造器,因此你还可以在查询中添加约束,然后使用 get 方法来获取结果.两个例子

<?phpuse App\Flight;$flights = App\Flight::all();foreach ($flights as $flight) {    echo $flight->name;
}123456789
$flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();1234

查询构造器能用的检索,这都能用.


集合——Collection

使用 Eloquent 中的方法比如 all 和 get 可以检索多个结果,并且会返回一个 Illuminate\Database\Eloquent\Collection 实例。Collection 类提供了 很多辅助函数 来处理Eloquent 结果:

$flights = $flights->reject(function ($flight) {
    return $flight->cancelled;
});123

也可以像数组一样遍历集合:

foreach ($flights as $flight) {    echo $flight->name;
}123

插入

要在数据库中创建新记录,只需创建一个新的模型实例,并在模型上设置属性,然后调用 save 方法:

<?phpnamespace App\Http\Controllers;use App\Flight;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class FlightController extends Controller{
    /**
     * 创建一个新的航班实例。
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // 验证请求...
        $flight = new Flight;        $flight->name = $request->name;        $flight->save();
    }
}123456789101112131415161718192021222324252627

在这个例子中,我们把来自 HTTP 请求中的 name 参数简单地指定给 App\Flight 模型实例的 name 属性。当我们调用 save 方法时,就会添加一条记录到数据库中。created_at 以及 updated_at 时间戳将在 save 方法被调用时会被自动设置,因此我们不需要去手动设置它们。


更新

 $flight = App\Flight::find(1);$flight->name = 'New Flight Name';$flight->save();12345

批量更新

不过,在这之前,你需要先在你的模型上指定 fillable 或 guarded 的属性,因为所有的 Eloquent 模型在默认情况下都不能进行批量赋值。 
当用户通过 HTTP 请求传入了一个意料之外的参数,并且该参数更改了数据库中你并不打算要更改的字段时,就会发生批量赋值漏洞。例如,恶意用户可能会通过 HTTP 请求发送 is_admin 参数,然后将其传递到模型的 create 方法中,此操作能让该用户把自己升级为管理者。

App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);123

删除

先查询再删除:

$flight = App\Flight::find(1);$flight->delete();123

或者通过主键删除:

App\Flight::destroy(1);App\Flight::destroy([1, 2, 3]);App\Flight::destroy(1, 2, 3);12345

通过查询删除(批量删除):

$deletedRows = App\Flight::where('active', 0)->delete();