如何创建和更新 Laravel Eloquent?


假设我们使用如下所示的 CREATE 语句创建了一个名为 students 的表:

CREATE TABLE students( 
   id          INTEGER       NOT NULL     PRIMARY KEY, 
   name        VARCHAR(15)   NOT NULL, 
   email       VARCHAR(20)   NOT NULL, 
   created_at  VARCHAR(27), 
   updated_at  VARCHAR(27), 
   address     VARCHAR(30)   NOT NULL, 
   age          INTEGER 
);

假设我们已使用以下数据填充了上述表格:

+----+---------------+------------------+-----------------------------+-----------------------------+---------+------+ 
| id |    name       |      email       |    created_at               |          updated_at         |  address|   age| 
+----+---------------+------------------+-----------------------------+-----------------------------+---------+------+ 
| 1  | Siya Khan     | siya@gmail.com   | 2022-05-01T13:45:55.000000Z | 2022-05-01T13:45:55.000000Z | Xyz     | 20   | 
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01T13:49:50.000000Z | 2022-05-01T13:49:50.000000Z | Xyz     | 18   | 
| 3  | Rehan Khan    | rehan@gmail.com  | NULL                        | NULL                        | testing | 20   | 
| 4  | Rehan         | rehan@gmail.com  | NULL                        | NULL                        | abcd    | 15   | 
| 5  | Nidhi Agarwal | nidhi@gmail.com  | NULL                        | NULL                        | abcd    | 20   | 
| 6  | Ashvik Khanna | ashvik@gmail.com | NULL                        | NULL                        | oooo    | 16   | 
| 7  | Viraj Desai   | viraj@gmail.com  | NULL                        | NULL                        | test    | 18   | 
| 8  | Priya Singh   | priya@gmail.com  | NULL                        | NULL                        | test123 | 20   | 
+----+---------------+------------------+-----------------------------+-----------------------------+---------+------+

示例 1

使用 updateOrCreate() 方法

我们将使用updateOrCreate()方法在学生表中插入或更新项目。此方法将负责在记录不存在时插入记录,或者在记录已存在时更新记录。

语法

updateOrCreate() 的语法如下所示:

$flight = Model::updateOrCreate(
   ['field1' => 'value'],
   [field=>value, field1=>value]
);

数组中的第一个值用于在表中搜索是否存在,如果不存在,则插入值,或者更新与数组中第一个参数匹配的值。

让我们尝试使用它举个例子。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::updateOrCreate( ['name' => 'Arbaaz'], ['age'=> 40,'email'=>'arbaaz@gmail.com', 'address'=>'xyz'] ); } }

由于学生表中没有与name:Arbaaz匹配的值,因此该值被插入到表中。

输出

以上代码的输出为:

+----+---------------+------------------+---------------------+---------------------+---------+------+ 
| id |    name       |        email     |     created_at      |     updated_at      | address | age  | 
+----+---------------+------------------+---------------------+---------------------+---------+------+ 
| 1  | Siya Khan     | siya@gmail.com   | 2022-05-01 13:45:55 | 2022-05-01 13:45:55 | xyz     | 20   | 
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01 13:49:50 | 2022-05-01 13:49:50 | xyz     | 18   |
| 3  | Rehan Khan    | rehan@gmail.com  | NULL                | NULL                | testing | 20   | 
| 4  | Rehan         | rehan@gmail.com  | NULL                | NULL                | abcd    | 15   | 
| 5  | Nidhi Agarwal | nidhi@gmail.com  | NULL                | NULL                | abcd    | 20   | 
| 6  | Ashvik Khanna | ashvik@gmail.com | NULL                | NULL                | oooo    | 16   | 
| 7  | Viraj Desai   | viraj@gmail.com  | NULL                | NULL                | test    | 18   | 
| 8  | Priya Singh   | priya@gmail.com  | NULL                | NULL                | test123 | 20   | 
| 9  | Arbaaz        | arbaaz@gmail.com | 2022-05-29 14:11:09 | 2022-05-29 14:11:09 | xyz     | 40   | 
+----+---------------+------------------+---------------------+---------------------+---------+------+

示例 2

使用 updateOrCreate() 方法更新

我们尝试插入一个值,因为它不存在,现在让我们尝试更新表中记录的示例。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; class StudentController extends Controller { public function index() { $student = Student::updateOrCreate( ['name' => 'Rehan'], ['age'=> 50] ); } }

在上面的示例中,我们尝试为姓名 Rehan 更新年龄为 50。

输出

以上代码的输出为:

+----+---------------+------------------+---------------------+---------------------+---------+------+
| id | name          |      email       |         created_at  |    updated_at       | address |  age |
+----+---------------+------------------+---------------------+---------------------+---------+------+
| 1  | Siya Khan     | siya@gmail.com   | 2022-05-01 13:45:55 | 2022-05-01 13:45:55 | xyz     | 20   |
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01 13:49:50 | 2022-05-01 13:49:50 | xyz     | 18   |
| 3  | Rehan Khan    | rehan@gmail.com  | NULL                | NULL                | testing | 20   |
| 4  | Rehan         | rehan@gmail.com  | NULL                | 2022-05-29 14:17:02 | abcd    | 50   |
| 5  | Nidhi Agarwal | nidhi@gmail.com  | NULL                | NULL                | abcd    | 20   |
| 6  | Ashvik Khanna | ashvik@gmail.com | NULL                | NULL                | oooo    | 16   |
| 7  | Viraj Desai   | viraj@gmail.com  | NULL                | NULL                | test    | 18   |
| 8  | Priya Singh   | priya@gmail.com  | NULL                | NULL                | test123 | 20   |
| 9  | Arbaaz        | arbaaz@gmail.com | 2022-05-29 14:11:09 | 2022-05-29 14:11:09 | xyz     | 40   |
+----+---------------+------------------+---------------------+---------------------+---------+------+

示例 3

使用 updateOrInsert() 和 DB Facade 进行更新。

要使用 DB facade,您需要使用类:use Illuminate\Support\Facades\DB; 或只使用 DB。DB Facade 是 Laravel 中使用的查询构建器工具。使用它,您可以尝试所有 SQL 查询。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\DB; class StudentController extends Controller { public function index() { DB::table('students')->updateOrInsert(['age'=>40],['name'=>'Arbaaz Khanna', 'email'=>'arbaaz@gmail.com', 'address'=>'testing', 'age'=>'35']); } }

在上述情况下,它将在表中搜索第一个参数中给定的键/值对,如果存在匹配的记录,则更新相同的记录,否则进行插入。

输出

以上代码的输出为

+----+---------------+------------------+---------------------+---------------------+---------+------+
| id |      name     |       email      |      created_at     |      updated_at     | address | age  |
+----+---------------+------------------+---------------------+---------------------+---------+------+
| 1  | Siya Khan     | siya@gmail.com   | 2022-05-01 13:45:55 | 2022-05-01 13:45:55 | xyz     | 20   |
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01 13:49:50 | 2022-05-01 13:49:50 | xyz     | 18   |
| 3  | Rehan Khan    | rehan@gmail.com  | NULL                | NULL                | testing | 20   |
| 4  | Rehan         | rehan@gmail.com  | NULL                | 2022-05-29 14:17:02 | abcd    | 50   |
| 5  | Nidhi Agarwal | nidhi@gmail.com  | NULL                | NULL                | abcd    | 20   |
| 6  | Ashvik Khanna | ashvik@gmail.com | NULL                | NULL                | oooo    | 16   |
| 7  | Viraj Desai   | viraj@gmail.com  | NULL                | NULL                | test    | 18   |
| 8  | Priya Singh   | priya@gmail.com  | NULL                | NULL                | test123 | 20   |
| 9  | Arbaaz        | arbaaz@gmail.com | 2022-05-29 14:11:09 | 2022-05-29 14:11:09 | testing | 35   |
+----+---------------+------------------+---------------------+---------------------+---------+------+

示例 4

使用 updateOrInsert() 和 DB Facade 进行插入。

这里我们检查名称:Niketan Vaahi是否在表中,如果不存在,则插入第二个参数中给定的详细信息的记录。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\DB; class StudentController extends Controller { public function index() { DB::table('students')->updateOrInsert( ['name'=>'Niketan Vaahi'], ['name'=>'Niketan Vaahi', 'email'=>'niketan@gmail.com', 'address'=>'testing', 'age'=>'35']); } }

输出

以上代码的输出为:

+----+---------------+------------------+---------------------+---------------------+---------+------+
| id |    name       |      email       |    created_at       |      updated_at     | address | age |
+----+---------------+------------------+---------------------+---------------------+---------+------+
| 1  | Siya Khan     | siya@gmail.com   | 2022-05-01 13:45:55 | 2022-05-01 13:45:55 | xyz     | 20  |
| 2  | Rehan Khan    | rehan@gmail.com  | 2022-05-01 13:49:50 | 2022-05-01 13:49:50 | xyz     | 18  |
| 3  | Rehan Khan    | rehan@gmail.com  | NULL                | NULL                | testing | 20  |
| 4  | Rehan         | rehan@gmail.com  | NULL                | 2022-05-29 14:17:02 | abcd    | 50  |
| 5  | Nidhi Agarwal | nidhi@gmail.com  | NULL                | NULL                | abcd    | 20  |
| 6  | Ashvik Khanna | ashvik@gmail.com | NULL                | NULL                | oooo    | 16  |
| 7  | Viraj Desai   | viraj@gmail.com  | NULL                | NULL                | test    | 18  |
| 8  | Priya Singh   | priya@gmail.com  | NULL                | NULL                | test123 | 20  |
| 9  | Arbaaz        | arbaaz@gmail.com | 2022-05-29 14:11:09 | 2022-05-29 14:11:09 | testing | 35  |
| 10 |Niketan Vaahi  | niketan@gmail.com| NULL                | NULL                | testing | 35  |
+----+---------------+------------------+---------------------+---------------------+---------+------+

更新于: 2022-08-30

16K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.