如何建立和更新 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.