Phục hồi giao dịch Laravel không hoạt động

Câu trả lời. các bảng của tôi là MyISAM, không phải Innodb. Các bảng MyISAM không hỗ trợ các giao dịch và thật không may, Laravel không cảnh báo bạn về điều này khi bạn cố gắng tạo một giao dịch. Vì thế. ghi lại câu trả lời ở đây vì lợi ích của hậu thế. Đoán tôi sẽ phải thiết lập một cơ sở dữ liệu sqlite riêng phản ánh lược đồ của tôi. tẩy trắng. đó là một lược đồ khá lớn

Đăng nhập để tham gia vào chủ đề này

Cụm vấn đề kỹ thuật được trả lời lần đầu vào ngày 6 tháng 10 năm 2022 Mức độ phổ biến 7/10 Mức độ hữu ích 5/10


khôi phục giao dịch db laravel không hoạt động

Mức độ phổ biến 6/10 Tính hữu ích 5/10 Ngôn ngữ php

[email protected]')); } }

Tạo một Seeder

Tạo máy gieo hạt dễ như ăn bánh. Bạn có thể nhắm mắt làm điều đó (nhưng làm ơn đừng)

Thực hiện lệnh thủ công php artisan migrate:make foo --path=app/migrations6 để tạo máy gieo hạt. Bây giờ, thư mục cơ sở dữ liệu/hạt giống sẽ bao gồm tất cả các bộ gieo hạt do khung tạo ra

php artisan make:seeder UsersTableSeeder

Phương thức mặc định của lớp seeder được chạy. Quá trình diễn ra khi bạn áp dụng lệnh thủ công php artisan migrate:make foo --path=app/migrations7. Bạn có thể đưa dữ liệu vào cơ sở dữ liệu của mình theo bất kỳ cách nào bạn muốn bằng cách sử dụng hàm run. Hơn nữa, bạn hoàn toàn có thể sử dụng các nhà máy mô hình Eloquent hoặc Trình tạo truy vấn để chèn dữ liệu theo cách thủ công

Bất kể, bạn nên nhớ rằng trong quá trình tạo cơ sở dữ liệu, tính năng bảo vệ gán hàng loạt sẽ tự động bị tắt

Ở đây, chúng ta sẽ sửa đổi lớp cơ bản php artisan migrate:make foo --path=app/migrations5 và thêm câu lệnh chèn cơ sở dữ liệu vào phương thức run

<?php use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('users')->insert([ 'name' => Str::random(10), 'email' => Str::random(10).'@gmail.com', 'password' => Hash::make('password'), ]); } }

Nếu bạn muốn gõ gợi ý bất kỳ phụ thuộc nào trong mã của phương thức chạy, bộ chứa dịch vụ của Laravel sẽ tự động giải quyết chúng

Hơn nữa, bạn có thể sử dụng hàm php artisan migrate:make foo --path=app/migrations9 để thực thi các lớp khởi tạo khác nhau từ lớp này, cho phép bạn tùy chỉnh thứ tự khởi tạo. Bạn có thể chia việc tạo cơ sở dữ liệu của mình thành các tệp khác nhau, đảm bảo rằng không có lớp trình tạo đơn lẻ nào mở rộng quá mức

Nhập tên của lớp seeder mà bạn muốn sử dụng như hình bên dưới

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }0

Máy gieo hạt chạy

Sau khi tạo seeder của bạn, bạn có thể cần sử dụng lệnh php artisan migrate --force0 để tạo lại trình tải tự động của Composer

Đấu tranh với thời gian chết và các vấn đề về WordPress? . Kiểm tra các tính năng của chúng tôi

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }1

Tiếp theo, bạn cần thực thi lệnh thủ công php artisan migrate:make foo --path=app/migrations7 để khởi tạo cơ sở dữ liệu của mình

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }2

Lệnh này thực thi lớp php artisan migrate:make foo --path=app/migrations5 bằng proxy, có thể được sử dụng để chạy các lớp gốc khác. Tuy nhiên, bạn có thể sử dụng tham số php artisan migrate --force3 để thực thi riêng một lớp seeder cụ thể như sau

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }3

Điều gì sẽ xảy ra nếu bạn muốn tạo lại cơ sở dữ liệu của mình từ đầu, bao gồm xóa tất cả các bảng và chạy lại tất cả các lần di chuyển của bạn?

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }4

Như trường hợp di chuyển, một số quy trình tạo giống có thể dẫn đến mất dữ liệu hoặc thay đổi không mong muốn. Vì lý do này, bạn sẽ được nhắc phê duyệt trước khi trình tạo tệp được thực thi để bảo vệ bạn khỏi việc thực thi các lệnh tạo tệp trên cơ sở dữ liệu chính của bạn

Nếu bạn đủ tự tin và không muốn bị gián đoạn bởi bước bảo mật đó, hãy sử dụng cờ php artisan migrate --force5 bên dưới

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }5

5 cách khác để sử dụng truy vấn cơ sở dữ liệu thô trong Laravel

Mặc dù Laravel cung cấp các công cụ tiện dụng như Eloquent và Query Builder, nhưng bạn vẫn có thể thực hiện các truy vấn thô bằng SQL. Chúng tôi đã làm tròn năm cách khác nhau để làm như vậy

Nhưng trước khi bắt đầu, bạn nên biết rằng các truy vấn thô không được bảo mật tự động, khiến chúng trở thành một cách tiếp cận rủi ro. Do đó, nếu bạn đang cung cấp bất kỳ tham số nào cho truy vấn, hãy đảm bảo rằng chúng ở đúng định dạng và có giá trị phù hợp, chẳng hạn như một số chứ không phải văn bản

Tính toán Trung bình/Tổng/Đếm

Bạn có thể sử dụng truy vấn thô nếu muốn tạo php artisan migrate --force6, sau đó sử dụng các hàm tổng hợp của MySQL như php artisan migrate --force7, php artisan migrate --force8, php artisan migrate --force9, php artisan migrate:rollback0 hoặc php artisan migrate:rollback1 như minh họa trong ví dụ sau

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }6

Thậm chí có thể thực hiện cả php artisan migrate:rollback2 và php artisan migrate:rollback3 trong cùng một truy vấn SQL

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }7

lọc năm

Trong trường hợp bạn cần thực hiện các phép tính SQL trong phạm vi php artisan migrate:rollback4 hoặc php artisan migrate:rollback5, bạn có thể sử dụng truy vấn php artisan migrate:rollback6 và php artisan migrate:rollback7. Sau khi nhóm, bạn cũng có thể sử dụng câu lệnh php artisan migrate:rollback8 bằng cách sử dụng truy vấn SQL php artisan migrate:rollback9 với class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }0

Chẳng hạn, lệnh dưới đây cho biết cách nhóm trường ngày/giờ theo năm

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }8

Tính toán một trường đơn (Truy vấn phụ)

Giả sử bạn muốn tính toán một cột từ một cột khác và trả về kết quả trong một truy vấn SQL. Làm thế nào bạn có thể hoàn thành nó?

Hãy cùng xem

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('flights'); }9

Đây là một ví dụ khác về câu lệnh SQL class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }1

php artisan make:migration create_users_table --create=users0

Chuyển đổi SQL cũ hơn

Tình huống phổ biến là có một câu lệnh SQL yêu cầu chuyển đổi sang Eloquent hoặc Query Builder, đặc biệt là từ một dự án cũ mà bạn đã làm việc trên đó

Chà, bạn không thực sự cần phải làm điều đó. Thay vào đó, bạn chỉ cần sử dụng câu lệnh class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }2 như được hiển thị

php artisan make:migration create_users_table --create=users1

Thực hiện truy vấn không có kết quả

class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }3 có thể chạy truy vấn SQL, không nhận được kết quả như class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }4 hoặc class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }5 mà không có biến

Điều này thường được sử dụng trong di chuyển cơ sở dữ liệu khi cấu trúc bảng thay đổi và dữ liệu cũ phải được thay đổi bằng dữ liệu mới

php artisan make:migration create_users_table --create=users2

Ngoài ra, class DatabaseSeeder extends Seeder { public function run() { $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array('email' => '[email protected]')); } }6 có thể chạy bất kỳ truy vấn SQL nào với lược đồ không giới hạn giá trị hoặc cột. Đây là một ví dụ

php artisan make:migration create_users_table --create=users3 Tìm hiểu cách sử dụng hiệu quả các giao dịch Laravel trong dự án tiếp theo của bạn với hướng dẫn này ✅Nhấp để Tweet

Tóm lược

Đến bây giờ, bạn đã hiểu sâu về các giao dịch cơ sở dữ liệu trong Laravel và cách triển khai chúng. Chúng không chỉ hỗ trợ tính toàn vẹn của dữ liệu mà còn giúp tối ưu hóa hiệu suất của Laravel và giúp quá trình phát triển của bạn dễ dàng hơn

Nhận tất cả các ứng dụng, cơ sở dữ liệu và trang web WordPress của bạn trực tuyến và dưới một mái nhà. Nền tảng đám mây hiệu suất cao, đầy đủ tính năng của chúng tôi bao gồm

  • Dễ dàng thiết lập và quản lý trong bảng điều khiển MyKinsta
  • Hỗ trợ chuyên gia 24/7
  • Mạng và phần cứng Google Cloud Platform tốt nhất, được cung cấp bởi Kubernetes để có khả năng mở rộng tối đa
  • Tích hợp Cloudflare cấp doanh nghiệp cho tốc độ và bảo mật
  • Tiếp cận đối tượng toàn cầu với tối đa 35 trung tâm dữ liệu và hơn 275 PoP trên toàn thế giới

Hãy tự kiểm tra với $20 trong tháng đầu tiên của Lưu trữ ứng dụng hoặc Lưu trữ cơ sở dữ liệu. Khám phá kế hoạch của chúng tôi hoặc nói chuyện với bộ phận bán hàng để tìm thấy sự phù hợp nhất của bạn

Điều gì xảy ra nếu khôi phục giao dịch không thành công?

Nếu khôi phục không thành công thì bạn sẽ gặp sự cố nghiêm trọng. Không thể đảm bảo độ tin cậy của cơ sở dữ liệu . Nói cách khác; .

Tại sao rollback không hoạt động trong SQL?

Sau khi SQL Server thực hiện một giao dịch, bạn không thể chạy câu lệnh ROLLBACK . Mỗi câu lệnh rollback phải có liên kết với câu lệnh BEGIN Transaction.

Khi rollback của một giao dịch có thể xảy ra?

Không thể khôi phục giao dịch sau khi câu lệnh CAM KẾT GIAO DỊCH được thực thi, ngoại trừ khi GIAO DỊCH CAM KẾT được liên kết với giao dịch lồng nhau có trong giao dịch đang được khôi phục.

Việc khôi phục giao dịch có cần thiết không?

ADO được viết đúng nhất. NET sẽ khôi phục các giao dịch không được cam kết rõ ràng. Vì vậy không thực sự cần thiết . Lợi ích chính mà tôi thấy của Rollback() rõ ràng gọi đó là khả năng đặt điểm dừng ở đó và sau đó kiểm tra kết nối hoặc cơ sở dữ liệu để xem điều gì đang xảy ra.

Chủ đề