如何创建和更新 Laravel Eloquent?

laravelphpserver side programming更新于 2025/4/29 22:07:17

假设我们已经使用 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,您需要使用以下类:使用 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']); } }

In the above case, it will search in the table for the key/values pairs given in the first params, if there is a matching record the same will be updated or the insert will take place.

输出

上述代码的输出是

+----+---------------+------------------+---------------------+---------------------+---------+------+
| 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  |
+----+---------------+------------------+---------------------+---------------------+---------+------+

相关文章