如何创建和更新 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 | +----+---------------+------------------+---------------------+---------------------+---------+------+
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP