laravel 5入门系列——9

本文介绍了Laravel中Eloquent模型的默认约定,如数据表名称、主键、时间戳等,并展示了如何检索数据、插入、更新和删除记录。Eloquent提供了一种流畅的查询方式,同时提到了集合(Collection)的使用以及批量更新的安全注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


默认的约定

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

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
    //
}
数据表名称 $table

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

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
    //
    protected $table = 'my_flights';
}
数据表主键 $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;
}
更改数据库连接

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


检索

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

<?php

use App\Flight;

$flights = App\Flight::all();

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

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


集合——Collection

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

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

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

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

插入

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

<?php

namespace 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();
    }
}

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


更新

 $flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();
批量更新

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

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

删除

先查询再删除:

$flight = App\Flight::find(1);

$flight->delete();

或者通过主键删除:

App\Flight::destroy(1);

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

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

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

$deletedRows = App\Flight::where('active', 0)->delete();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值