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

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

Bóng tối

968 câu trả lời  Chất lượng trung bình 8/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

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

Bóng tối

968 câu trả lời  Chất lượng trung bình 8/10


Các vấn đề về độ chính xác và tính nhất quán của dữ liệu có thể dẫn đến mọi thứ, từ những bất tiện nhỏ đến những mối quan tâm lớn của công ty. Điều quan trọng là xây dựng mã lưu trữ, thay đổi và xóa dữ liệu trong cơ sở dữ liệu của bạn một cách an toàn

Nhập giao dịch cơ sở dữ liệu Laravel

Giao dịch cơ sở dữ liệu là một cách tiếp cận hiệu quả để đảm bảo tính toàn vẹn của dữ liệu. Laravel đơn giản hóa các giao dịch này trên nhiều loại cơ sở dữ liệu

Nhưng chính xác thì chúng là gì?

Laravel đơn giản hóa các giao dịch cơ sở dữ liệu 🚀 Tìm hiểu thêm trong hướng dẫn này ⬇️Nhấp để Tweet

Đến cuối hướng dẫn mở rộng này, bạn sẽ học được tất cả về giao dịch cơ sở dữ liệu trong Laravel và cách sử dụng chúng hiệu quả trong dự án của bạn

Giao dịch cơ sở dữ liệu Laravel là gì?

Trước khi chúng ta chuyển sang khía cạnh kỹ thuật của mọi thứ, trước tiên hãy hiểu các giao dịch cơ sở dữ liệu Laravel là gì và bạn có thể hưởng lợi từ chúng như thế nào

Cần phải hét lên ở đây. Kinsta thật tuyệt vời, tôi sử dụng nó cho trang web cá nhân của mình. Hỗ trợ nhanh chóng và xuất sắc, và máy chủ của họ là nhanh nhất cho WordPress

Phục hồi giao dịch Laravel không hoạt động
Phillip Stemann
Xem kế hoạch

Giao dịch cơ sở dữ liệu là một tập hợp các thao tác mà bạn có thể thực hiện một cách an toàn trong cấu trúc cơ sở dữ liệu của ứng dụng, chẳng hạn như truy vấn SQL để sửa đổi dữ liệu (e. g. cập nhật, xóa và chèn)

Tại bất kỳ thời điểm nào, bạn có thể quyết định khôi phục tất cả các truy vấn của giao dịch. Ngoài ra, bất kỳ truy vấn nào bạn thực hiện sẽ được cơ sở dữ liệu coi là một hành động đơn lẻ

Hãy xem xét một ví dụ về điều này

Giả sử chúng tôi có một ứng dụng cho phép người dùng tạo tài khoản. Đương nhiên, có thể có một hoặc nhiều người dùng được liên kết với mỗi tài khoản. Nếu ứng dụng này đồng thời tạo tài khoản và người dùng đầu tiên, thì bạn sẽ phải giải quyết vấn đề xảy ra nếu tài khoản được tạo đúng cách, nhưng người dùng thì không

Hãy xem mã mẫu này

// Create Account
$newAcct = Account::create([
  'accountname' => Input::get('accountname'),
]);

// Create User
$newUser = User::create([
  'username' => Input::get('username'),
  'account_id' => $newAcct->id,
]);

Có hai kịch bản ở đây có thể gây ra các vấn đề khó chịu

  1. Tài khoản không được tạo
  2. Không tạo được người dùng

Hãy xem xét tình huống sau

Có tài khoản mà không có người dùng dẫn đến dữ liệu trong cơ sở dữ liệu không thống nhất. Để giải quyết vấn đề này, bạn có thể thực hiện nhiệm vụ khó khăn là viết mã xung quanh nó hoặc lưu rất nhiều mã hoặc đơn giản là gói nó trong một giao dịch để hoàn thành công việc nhanh chóng

Mặc dù các giao dịch cơ sở dữ liệu có mặt trong hầu hết các cơ sở dữ liệu SQL, nhưng chúng khác nhau chủ yếu ở cách thực hiện và hiệu quả của chúng. Các hệ thống phổ biến như MySQL, SQLite, PostgreSQL và Oracle hỗ trợ các giao dịch, vì vậy bạn sẽ không gặp khó khăn khi triển khai cơ sở dữ liệu SQL ưa thích của mình

di cư

Migration là một chức năng quan trọng trong Laravel cho phép bạn xây dựng một bảng trong cơ sở dữ liệu của mình, thực hiện các sửa đổi và chia sẻ lược đồ cơ sở dữ liệu của ứng dụng. Bạn có thể sử dụng di chuyển Laravel để chỉnh sửa bảng bằng cách thêm cột mới hoặc xóa cột hiện có

Giả sử bạn đang thảo luận ý tưởng với một nhóm và cần điều chỉnh bảng. Tệp SQL phải được chia sẻ và nhập bởi một người nào đó trong nhóm. Có thể do quên import file SQL gây ra sự cố trong quá trình vận hành ứng dụng

Đây là nơi Laravel migration đến giải cứu. Bạn có thể thêm một cột mới vào cơ sở dữ liệu của mình hoặc xóa các mục nhập mà không ảnh hưởng đến những mục đã có

máy gieo hạt

Seeding là một công cụ do Laravel cung cấp cho các nhà phát triển để hỗ trợ kiểm tra các loại dữ liệu khác nhau, sửa lỗi và điều chỉnh hiệu suất. Bạn có thể tự động thêm nhiều hàng dữ liệu giả vào bảng cơ sở dữ liệu của mình thông qua trình tạo cơ sở dữ liệu trong một lệnh duy nhất

Do đó, bạn có thể bắt đầu lại với một cơ sở dữ liệu mới và các giá trị mẫu thay vì phải nhập chúng theo cách thủ công mỗi khi cơ sở dữ liệu được khôi phục

Tùy chọn cho giao dịch cơ sở dữ liệu Laravel

Laravel cung cấp các công cụ khác nhau để quản lý dữ liệu của bạn như Adminer. Đối với các giao dịch cơ sở dữ liệu, có ba phương pháp ở cuối cơ sở dữ liệu để bắt đầu giao dịch theo cách thủ công và có toàn quyền kiểm soát việc quản lý giao dịch

Nhiều người dùng thấy các tùy chọn này linh hoạt hơn để xác định chính xác thời điểm giao dịch nên được thực hiện hoặc khôi phục

  • Tạo một giao dịch. Sử dụng lệnh
    php artisan make:migration create_users_table --create=users
    4 để bắt đầu giao dịch
  • Quay trở lại một giao dịch. Sử dụng lệnh
    php artisan make:migration create_users_table --create=users
    5 nếu bạn muốn thực hiện thay đổi hoặc hoàn tác hành động
  • Cam kết giao dịch. Nếu mọi thứ diễn ra theo đúng kế hoạch, hãy sử dụng lệnh
    php artisan make:migration create_users_table --create=users
    6

Luôn nhớ kết thúc mọi giao dịch đang mở bằng hành động cam kết hoặc quay lui, đặc biệt là các vòng lặp. Nếu không, phương pháp thủ công này sẽ không đồng bộ và bản ghi của bạn sẽ không được cập nhật

Cách làm việc với cơ sở dữ liệu Laravel của bạn

Migration và seeder, như đã đề cập trước đây, là các giải pháp phức tạp được thiết kế cho các nhà phát triển Laravel để nhanh chóng triển khai, xóa và khôi phục cơ sở dữ liệu của ứng dụng bằng cách giảm sự chênh lệch. Nó rất hữu ích, đặc biệt là khi có nhiều nhà phát triển đang làm việc trên cùng một ứng dụng

Phần này sẽ chỉ cho bạn cách sử dụng migrations và seeder dễ dàng với cơ sở dữ liệu Laravel của bạn bằng các lệnh thủ công

điều kiện tiên quyết

Đây là những gì bạn cần để bắt đầu

  1. Người dùng không phải root có quyền sudo trên Ubuntu 18. 04 máy tính cục bộ hoặc máy chủ phát triển. Bạn nên thiết lập tường lửa hoạt động nếu bạn đang sử dụng máy chủ từ xa
  2. LEMP được cài đặt trên máy của bạn. Bạn có thể chọn cài đặt Docker và Docker Compose để chạy ứng dụng của mình nếu bạn cảm thấy thoải mái hơn khi làm việc với chúng

Công cụ DevKinsta của chúng tôi được cung cấp bởi Docker và được sử dụng bởi 34,700++ nhà phát triển và nhà thiết kế để dễ dàng tạo và phát triển một hoặc nhiều trang web WordPress.

Có các công cụ phát triển web khác mà bạn có thể sử dụng tùy thuộc vào kỹ năng và nhu cầu mã hóa của mình

Di chuyển Laravel

Có hai phương thức trong một lớp di chuyển. lên và xuống. Phương thức up được sử dụng để tạo bảng, chỉ mục hoặc cột mới trong cơ sở dữ liệu của bạn. Phương pháp xuống sẽ hoàn tác các hiệu ứng của phương pháp lên

Bạn có thể sử dụng trình tạo lược đồ Laravel để xây dựng và chỉnh sửa các bảng một cách tự do trong mỗi phương thức này. Chẳng hạn, sự di chuyển này tạo ra một bảng chuyến bay

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');
}

Hãy nhớ rằng các lệnh

php artisan make:migration create_users_table --create=users
7 cần làm rõ tên của bảng. Vì vậy hãy đảm bảo rằng
php artisan make:migration create_users_table --create=users
8 phù hợp với những gì bạn muốn

Bạn có thể sử dụng các tùy chọn

php artisan make:migration create_users_table --create=users
9 và
php artisan make:migration add_votes_to_users_table --table=users
0 để chỉ định tên của bảng và liệu quá trình di chuyển có tạo bảng mới hay không như minh họa bên dưới

php artisan make:migration create_users_table --create=users
php artisan make:migration add_votes_to_users_table --table=users

Thư mục cơ sở dữ liệu/di chuyển của bạn bây giờ sẽ bao gồm di chuyển mới. Mỗi tên tệp di chuyển bao gồm một dấu thời gian mà Laravel sử dụng để xác định thứ tự di chuyển

Bạn cũng có tùy chọn để xác định một

php artisan make:migration add_votes_to_users_table --table=users
1, liên quan đến thư mục gốc của bản cài đặt của bạn. Sử dụng lệnh sau

php artisan migrate:make foo --path=app/migrations

Di chuyển đang chạy

Có một số lệnh hữu ích mà bạn có thể tận dụng khi chạy di chuyển. Chúng ta hãy đi qua một vài trong số họ

  • php artisan make:migration add_votes_to_users_table --table=users
    2. Lệnh này xuất bản tất cả lược đồ của bạn vào cơ sở dữ liệu. Nó cũng tạo ra một bảng trong cơ sở dữ liệu
  • php artisan make:migration add_votes_to_users_table --table=users
    3. Lệnh này chạy tất cả các lần di chuyển trong một thư mục. Nếu bạn nhận được thông báo lỗi “Không có gì để di chuyển”, hãy chạy lệnh
    php artisan make:migration add_votes_to_users_table --table=users
    4 mà không có thư mục ứng dụng
  • php artisan make:migration add_votes_to_users_table --table=users
    5. Sử dụng lệnh này nếu bạn muốn chạy di chuyển cho một gói

Đôi khi bạn có thể gặp lỗi “Không tìm thấy lớp” khi thực hiện di chuyển. Nếu bạn làm như vậy, hãy chạy lệnh

php artisan make:migration add_votes_to_users_table --table=users
6

Một số di chuyển có thể nguy hiểm và có thể dẫn đến mất dữ liệu của bạn. Do đó, Laravel sẽ nhắc bạn xác nhận việc thực thi các lệnh để bảo vệ dữ liệu của bạn

Nếu bạn không muốn được nhắc, hãy sử dụng

php artisan make:migration add_votes_to_users_table --table=users
7 để buộc các lệnh như sau

php artisan migrate --force

Quay lại di chuyển

Sử dụng lệnh rollback khi bạn cần đảo ngược đợt di chuyển cuối cùng như sau

Triển khai ứng dụng của bạn lên Kinsta - Bắt đầu với Khoản tín dụng $20 ngay bây giờ

Chạy nút của bạn. js, Python, Go, PHP, Ruby, Java và Scala, (hoặc hầu hết mọi ứng dụng khác nếu bạn sử dụng Dockerfiles tùy chỉnh của riêng mình), trong ba bước đơn giản

Triển khai ngay bây giờ và nhận $20 giảm giá

php artisan migrate:rollback

Dưới đây là một số lệnh khôi phục khác mà bạn có thể sử dụng

  • php artisan make:migration add_votes_to_users_table --table=users
    8. Lệnh này đảo ngược tất cả các lần di chuyển, không chỉ thao tác cuối cùng
  • php artisan make:migration add_votes_to_users_table --table=users
    9. Sử dụng lệnh này khi bạn muốn cài đặt mới cơ sở dữ liệu của mình. Nó xóa tất cả các bảng hiện có và thực hiện lệnh
    php artisan migrate:make foo --path=app/migrations
    0
  • php artisan migrate:make foo --path=app/migrations
    1. Đây là lệnh hai trong một thực hiện cả hai lệnh
    php artisan migrate:make foo --path=app/migrations
    2
  • php artisan migrate:make foo --path=app/migrations
    3. Thao tác này sẽ chạy lệnh
    php artisan migrate:make foo --path=app/migrations
    4 trước khi tạo cơ sở dữ liệu. Khi bạn cài đặt ứng dụng trên máy chủ mới, bạn có thể sử dụng lệnh này để khởi tạo (tôi. e. tải dữ liệu vào) cơ sở dữ liệu

Laravel Seeding

Seeder là một lớp tạo và đặt các mẫu dữ liệu (hạt giống) vào cơ sở dữ liệu. Laravel cung cấp một kỹ thuật đơn giản để tạo dữ liệu thử nghiệm cho cơ sở dữ liệu của bạn bằng cách sử dụng các lớp hạt giống trong thư mục cơ sở dữ liệu/hạt giống

Bạn có thể tự do chọn tên cho các lớp hạt giống của mình. Nhưng chúng tôi khuyên bạn nên tuân theo mẫu đặt tên rõ ràng mà bạn chọn, chẳng hạn như UsersTableSeeder. Sau đó, một lớp học

php artisan migrate:make foo --path=app/migrations
5 được tạo cho bạn theo mặc định

Đây là một ví dụ về seed class cơ sở dữ liệu trong Laravel

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]'));
  }
}

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/migrations
6 để 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/migrations
7. 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/migrations
5 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/migrations
9 để 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 --force
0 để 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/migrations
7 để 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/migrations
5 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 --force
3 để 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 --force
5 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 --force
6, sau đó sử dụng các hàm tổng hợp của MySQL như
php artisan migrate --force
7,
php artisan migrate --force
8,
php artisan migrate --force
9,
php artisan migrate:rollback
0 hoặc
php artisan migrate:rollback
1 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:rollback
2 và
php artisan migrate:rollback
3 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:rollback
4 hoặc
php artisan migrate:rollback
5, bạn có thể sử dụng truy vấn
php artisan migrate:rollback
6 và
php artisan migrate:rollback
7. Sau khi nhóm, bạn cũng có thể sử dụng câu lệnh
php artisan migrate:rollback
8 bằng cách sử dụng truy vấn SQL
php artisan migrate:rollback
9 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=users
0

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=users
1

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=users
2

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=users
3 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.