使用Eloquent模型对数据表进行增删改查等操作

使用Eloquent ORM可以非常方便的与数据库打交道,每张数据表都对应一个与该表进行交互的模型(Model),通过模型类,我们可以对数据表进行查询、插入、更新、删除等操作。

定义模型

我们从创建一个 Eloquent 模型开始,模型类通常位于 app\model目录下,你也可以将其放在其他可以被composer.json 文件自动加载到的地方。所有 Eloquent 模型都继承自Illuminate\Database\Eloquent\Model类。

我们来看一个Article模型的例子,我们将用该类获取和存取数据表Article(文章)中的信息:

<?php 
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $table = 'article';
    
    // public $timestamps = false;
    // const CREATED_AT = 'creation_date';
    // const UPDATED_AT = 'last_update';
    
    // 允许可被赋值的字段
    // protected $fillable = ['title', 'author'];
    // 不可被赋值的字段
    // protected $guarded = ['price'];
}

代码中,使用protected $table = 'article';定义了模型所使用的数据表是article,默认情况下,Eloquent每张表的主键名为id,数据表中应该有时间戳created_atupdated_at两个字段,表示数据的创建时间和更新时间,我们在插入和更新模型的时候,Eloquent会自动为这两个字段更新值。如果你的数据表中没有这两个字段或者是被其他字段名替代这两个字段,则需要在模型中设置CREATED_ATUPDATED_AT常量。如果你不想使用默认的时间戳,也可以使用public $timestamps = false;来关闭时间戳。

如果我们在插入或更新模型数据时,只允许更新某个字段,其他非法提交的字段不允许更新,则可以使用来protected $fillable = ['title', 'author'];约束字段的操作,'title', 'author'article表中的两个字段。同样的如果不允许更新某个字段,可以使用protected $guarded = ['price'];来限制更新。

获取模型

创建完模型及其关联的数据表后,就可以从数据库中获取数据了。将 Eloquent 模型看作功能强大的查询构建器,你可以使用它来流畅的查询与其关联的数据表。例如:

<?php
use App\Models\Article;

$articles = Article::all();

foreach ($articles as $article) {
    echo $article->title;
}

Eloquent 的all方法返回模型表的所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用get 方法获取对应结果:

$articles = Article::where('cid', 1)
               ->orderBy('id', 'desc')
               ->take(10)
               ->get();

其实本质上 Eloquent 模型就是查询构建器,你可以在 Eloquent 查询中使用查询构建器的所有方法。

获取单个模型

我们可以使用findfirst 获取单个记录。这些方法返回单个模型实例而不是模型集合:

// 通过主键获取模型...
$article = Article::find(1);

// 获取匹配查询条件的第一个模型...
$article = Article::where('cid', 1)->first();

还可以通过传递主键数组来调用find方法,这将会返回匹配记录集合:

$article = Article::find([1, 2, 3]);

获取聚合结果

当然,我们还可以使用查询构建器提供的聚合方法,例如 count、sum、max,以及其它查询构建器提供的聚合函数。这些方法返回计算后的结果而不是整个模型实例:

$count = Article::where('cid', 1)->count();
$max = Article::where('cid', 1)->max('hits');

插入模型

我们想要在数据库article表中插入新的记录,只需创建一个新的模型实例,设置模型的属性,然后调用save方法:

<?php 
namespace App\Controllers;

use Slim\Http\Request;
use Slim\Http\Response;
use App\Models\Article;

class ArticleController extends Controller
{
    /**
     * 创建一个新的文章实例
     *
     * @param  Request  $request
     * @return Response
     */
    public function create($request, $response)
    {
        // 验证请求...

        $article = new Article;

        $article->title = $request->title;

        $article->save();
    }
}

在这个代码中,我们只是简单分配 HTTP 请求中的title参数值给 App\Models\Article模型实例的title属性,当我们调用save方法时,一条记录将会被插入数据库。created_atupdated_at时间戳在save方法被调用时会自动被设置,所以没必要手动设置它们。

更新模型

save方法还可以用于更新数据库中已存在的模型。要更新一个模型,应该先获取它,设置我们想要更新的属性,然后调用save方法。同样,更新模型时,updated_at时间戳会被自动更新,所以没必要手动设置其值:

$article = Article::find(1);
$article->title = '新文章标题';
$article->save();

批量更新

我们还可以同时修改给定查询提供的多个模型实例,在本例中,所有类型为1且 author=Somebody的文章都被标记为hot(热门文章):

Article::where('cid', 1)
      ->where('author', 'Somebody')
      ->update(['hot' => 1]);

update方法要求以数组形式传递键值对参数,代表着数据表中应该被更新的列。

不存在则创建

插入数据前,先要判断是否已存在,如果数据已存在则不需要再重复插入,如果数据不存在才插入,这种场景可以使用firstOrCreate/firstOrNew完美解决。

$article = Article::firstOrCreate(['title' => 'test']);
        $article = $test->save();

不存在则创建,存在则更新

如果模型已存在则更新,否则创建新模型,可使用updateOrCreate来处理这种场景。例:如果有title=tet和cid=1的记录,则更新,否则创建新的记录。

Article::updateOrCreate(
     ['title' => 'test', 'cid' => 1],
     ['title' => 'helloweba']
);

删除模型

我们要删除一个模型,调用模型实例上的delete方法:

$article = Article::find(1);
$article->delete();

上面的例子中,我们在调用delete 方法之前从数据库中获取该模型,不过,如果我们知道模型的主键的话,可以调用destroy方法直接删除而不需要获取它:

Article::destroy(1);
Article::destroy([1, 2, 3]);
Article::destroy(1, 2, 3);

还可以通过查询删除多个模型:

$deletedRows = Article::where('active', 0)->delete();

小结

本文简要讲述了Eloquent模型的使用方法,在实际项目应用中能方便快捷的通过模型操作数据库,大大提高编码效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel 是一个流行的 PHP 框架,它提供了许多便利的工具来执行数据库操作。下面是一些使用 Laravel 进行数据库增删改查的示例: 1. 数据库连接 在 Laravel 中,你可以在 `.env` 文件中配置数据库连接信息,例如: ``` DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mydatabase DB_USERNAME=myusername DB_PASSWORD=mypassword ``` 2. 创建数据表 使用 Laravel 迁移(Migration)可以轻松创建和修改数据表。例如,创建一个 `users` : ``` php artisan make:migration create_users_table --create=users ``` 在生成的迁移文件中,你可以定义的结构和字段信息,例如: ``` public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $$table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } ``` 3. 插入数据 使用 Laravel 的 Eloquent ORM(对象关系映射)可以轻松地执行插入操作。例如,创建一个新的用户记录: ``` $user = new App\Models\User; $user->name = 'John Doe'; $user->email = '[email protected]'; $user->password = Hash::make('password'); $user->save(); ``` 4. 查询数据 使用 Eloquent ORM 可以轻松地执行查询操作。例如,查询所有用户记录: ``` $users = App\Models\User::all(); ``` 查询特定用户记录: ``` $user = App\Models\User::find(1); ``` 查询满足条件的用户记录: ``` $users = App\Models\User::where('name', 'John')->get(); ``` 5. 更新数据 使用 Eloquent ORM 可以轻松地执行更新操作。例如,更新特定用户记录: ``` $user = App\Models\User::find(1); $user->name = 'Jane Doe'; $user->save(); ``` 更新满足条件的用户记录: ``` App\Models\User::where('name', 'John')->update(['name' => 'Jane']); ``` 6. 删除数据 使用 Eloquent ORM 可以轻松地执行删除操作。例如,删除特定用户记录: ``` $user = App\Models\User::find(1); $user->delete(); ``` 删除满足条件的用户记录: ``` App\Models\User::where('name', 'John')->delete(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值