Khóa chính tổng hợp của Laravel 9

Gói kích hoạt hỗ trợ khóa tổng hợp trên Eloquent Models

Cài đặt

Cài đặt nó với nhà soạn nhạc

composer require thiagoprz/eloquent-composite-key

Cách sử dụng

Xác định khóa chính dưới dạng một mảng và sử dụng đặc điểm HasCompositeKey trên lớp mô hình của bạn

Using primary keys to find records:

________1

The main idea of this package is to allow Laravel projects use composite keys on models despite Eloquent not supporting them officially [see //laravel.com/docs/8.x/eloquent#composite-primary-keys].

License

MIT

Nó cung cấp một đặc điểm có thể được sử dụng trong các lớp mô hình của Laravel để xác định nhiều thuộc tính sẽ được sử dụng làm khóa chính

Tên của các thuộc tính khóa chính phải được xác định trong các lớp mô hình dưới dạng một mảng được gán cho một biến lớp được bảo vệ của lớp chính


tháng 3 năm 2021
Số 10Thường là các ứng dụng cơ sở dữ liệu bảng để lưu trữ thông tin, xác định 1 trường có giá trị duy nhất trong tất cả các bản ghi để làm khóa truy cập dữ liệu bản ghi nhanh hơn

Tuy nhiên, trong một số ứng dụng nhất định, có nhu cầu sử dụng nhiều hơn một trường bảng làm khóa giá trị duy nhất để truy cập các bản ghi bảng nhanh hơn

Gói này cung cấp một đặc điểm có thể được sử dụng với các đối tượng mô hình của Laravel để xác định trường nào sẽ được sử dụng làm khóa chính bao gồm các giá trị của nhiều trường

Manuel Lemos

giải thưởng sáng tạo

đề cử. 7x


Gói kích hoạt hỗ trợ khóa tổng hợp trên Eloquent Models

Cài đặt

Cài đặt nó với nhà soạn nhạc

composer require thiagoprz/eloquent-composite-key

Cách sử dụng

Xác định khóa chính dưới dạng một mảng và sử dụng đặc điểm HasCompositeKey trên mô hình của bạn

class User extends Model 
{
    use HasCompositeKey;
    ...
    protected $primaryKey = ['firstKey', 'secondKey'];
    ...
}

Ý tưởng của gói này là cho phép các mô hình hùng hồn sử dụng các khóa tổng hợp mặc dù Eloquent không hỗ trợ chính thức [xem https. // ấu trùng. com/docs/8. x/eloquent#composite-primary-keys]

Lớp Laravel

Schema::rename[$from, $to];

6 cung cấp một cách thức bất khả tri cơ sở dữ liệu để thao tác với các bảng. Nó hoạt động tốt với tất cả các cơ sở dữ liệu được Laravel hỗ trợ và có API thống nhất trên tất cả các hệ thống này

Tạo và xóa bảng

Để tạo một bảng cơ sở dữ liệu mới, phương pháp

Schema::rename[$from, $to];

7 được sử dụng

Schema::create['users', function[$table]

$table->increments['id'];

Đối số đầu tiên được truyền cho phương thức

Schema::rename[$from, $to];

8 là tên của bảng và đối số thứ hai là

Schema::rename[$from, $to];

9 sẽ nhận một đối tượng

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

0 có thể được sử dụng để xác định bảng mới

Để đổi tên một bảng cơ sở dữ liệu hiện có, có thể sử dụng phương pháp

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

1

Schema::rename[$from, $to];

Để chỉ định kết nối nào sẽ diễn ra hoạt động lược đồ, hãy sử dụng phương thức

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

2

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

Để bỏ một bảng, bạn có thể sử dụng phương pháp

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

3

Schema::dropIfExists['users'];

Thêm cột

Để cập nhật một bảng hiện có, chúng ta sẽ sử dụng phương thức

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

4

Schema::table['users', function[$table]

Trình tạo bảng chứa nhiều loại cột mà bạn có thể sử dụng khi tạo bảng của mình

LệnhMô tả

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

5Tăng ID bằng cách sử dụng tương đương "số nguyên lớn".

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

6BIGINT tương đương với bảng

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

7BLOB tương đương với bảng_______7_______8BOOLEAN tương đương với bảng

Schema::connection['foo']->create['users', function[$table]

$table->increments['id'];

9CHAR tương đương với độ dài

Schema::dropIfExists['users'];

0DATE tương đương với bảng

Schema::dropIfExists['users'];

1DATETIME tương đương với bảng

Schema::dropIfExists['users'];

2DECIMAL tương đương với độ chính xác và tỷ lệ

Schema::dropIfExists['users'];

3DOUBLE tương đương với độ chính xác, tổng cộng 15 chữ số trong bảng và 8 chữ số sau dấu thập phân tương đương với_______4AT___13_________4LOẠI3____ .

Schema::dropIfExists['users'];

7INTEGER equivalent to the table

Schema::dropIfExists['users'];

8LONGTEXT equivalent to the table

Schema::dropIfExists['users'];

9MEDIUMINT equivalent to the table

Schema::table['users', function[$table]

0MEDIUMTEXT equivalent to the table

Schema::table['users', function[$table]

1Adds INTEGER

Schema::table['users', function[$table]

2 and STRING

Schema::table['users', function[$table]

3

Schema::table['users', function[$table]

4Same as

Schema::table['users', function[$table]

5, except allows NULLs

Schema::table['users', function[$table]

6SMALLINT equivalent to the table

Schema::table['users', function[$table]

7TINYINT equivalent to the table

Schema::table['users', function[$table]

8Adds deleted_at column for soft deletes

Schema::table['users', function[$table]

9VARCHAR equivalent column

$table->string['name']->after['email'];

0VARCHAR equivalent with a length

$table->string['name']->after['email'];

1TEXT equivalent to the

Sử dụng Sau Trên MySQL

Nếu bạn đang sử dụng cơ sở dữ liệu MySQL, bạn có thể sử dụng phương thức

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

0 để chỉ định thứ tự của các cột

$table->string['name']->after['email'];

Đổi tên cột

Để đổi tên một cột, bạn có thể sử dụng phương pháp

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

1 trên Schema builder. Trước khi đổi tên cột, hãy đảm bảo thêm phần phụ thuộc

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

2 vào tệp

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

3 của bạn

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

Ghi chú. Đổi tên loại cột

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

4 không được hỗ trợ

thả cột

Để thả một cột, bạn có thể sử dụng phương pháp

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

5 trên Schema builder. Trước khi loại bỏ một cột, hãy nhớ thêm phần phụ thuộc

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

2 vào tệp

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

3 của bạn

Xoá một cột khỏi bảng cơ sở dữ liệu

Schema::table['users', function[$table]

$table->dropColumn['votes'];

Xoá nhiều cột từ một bảng cơ sở dữ liệu

Schema::table['users', function[$table]

$table->dropColumn[array['votes', 'avatar', 'location']];

kiểm tra sự tồn tại

Kiểm tra sự tồn tại của bảng

Bạn có thể dễ dàng kiểm tra sự tồn tại của một bảng hoặc cột bằng cách sử dụng các phương pháp

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

8 và

Schema::table['users', function[$table]

$table->renameColumn['from', 'to'];

9

if [Schema::hasTable['users']]

Kiểm tra sự tồn tại của các cột

Schema::rename[$from, $to];

0

Thêm chỉ mục

Trình tạo lược đồ hỗ trợ một số loại chỉ mục. Có hai cách để thêm chúng. Đầu tiên, bạn có thể xác định chúng một cách trôi chảy trên định nghĩa cột hoặc bạn có thể thêm chúng một cách riêng biệt

Schema::rename[$from, $to];

1

Hoặc, bạn có thể chọn thêm các chỉ mục trên các dòng riêng biệt. Dưới đây là danh sách tất cả các loại chỉ mục có sẵn

LệnhMô tả

Schema::table['users', function[$table]

$table->dropColumn['votes'];

0Thêm khóa chính

Schema::table['users', function[$table]

$table->dropColumn['votes'];

1Thêm khóa tổng hợp

Schema::table['users', function[$table]

$table->dropColumn['votes'];

2Thêm chỉ mục duy nhất

Schema::table['users', function[$table]

$table->dropColumn['votes'];

3Thêm chỉ mục cơ bản

Khóa ngoại

Laravel cũng cung cấp hỗ trợ để thêm các ràng buộc khóa ngoại vào bảng của bạn

Schema::rename[$from, $to];

2

Trong ví dụ này, chúng tôi đang nói rằng cột

Schema::table['users', function[$table]

$table->dropColumn['votes'];

4 tham chiếu cột

Schema::table['users', function[$table]

$table->dropColumn['votes'];

5 trên bảng

Schema::table['users', function[$table]

$table->dropColumn['votes'];

6. Đảm bảo tạo cột khóa ngoại trước

Bạn cũng có thể chỉ định các tùy chọn cho hành động "xóa" và "cập nhật" của ràng buộc

Schema::rename[$from, $to];

3

Để xóa khóa ngoại, bạn có thể sử dụng phương thức

Schema::table['users', function[$table]

$table->dropColumn['votes'];

7. Một quy ước đặt tên tương tự được sử dụng cho các khóa ngoại như được sử dụng cho các chỉ mục khác

Schema::rename[$from, $to];

4

Ghi chú. Khi tạo khóa ngoại tham chiếu đến số nguyên tăng dần, hãy nhớ luôn đặt cột khóa ngoại là

Schema::table['users', function[$table]

$table->dropColumn['votes'];

8

Giảm chỉ số

Để xóa một chỉ mục, bạn phải chỉ định tên của chỉ mục. Laravel mặc định gán một tên hợp lý cho các chỉ mục. Chỉ cần nối tên bảng, tên của cột trong chỉ mục và loại chỉ mục. Dưới đây là một số ví dụ

Khóa chính có thể được tổng hợp?

Một bảng chỉ được có một khóa chính, khóa này có thể bao gồm một hoặc nhiều trường. Khi nhiều trường được sử dụng làm khóa chính, chúng được gọi là khóa tổng hợp . Nếu một bảng có khóa chính được xác định trên bất kỳ [các] trường nào, thì bạn không thể có hai bản ghi có cùng giá trị của [các] trường đó.

Khóa chính tổng hợp có thể được cập nhật không?

Khi PK di chuyển, dữ liệu phải được xáo trộn quanh đĩa để giữ đúng thứ tự. Tùy thuộc vào tập dữ liệu, MySQL có thể phải di chuyển nhiều hàng vật lý để thực hiện việc này. Điều tương tự cũng xảy ra với việc cập nhật PK của bạn. Việc thay đổi PK sẽ thay đổi thứ tự trên đĩa và yêu cầu di chuyển nhiều hàng .

Khóa chính của một thực thể hỗn hợp là gì?

Khóa chính tổng hợp, còn được gọi là khóa tổng hợp, là sự kết hợp của hai hoặc nhiều cột để tạo thành khóa chính cho bảng . Trong JPA, chúng tôi có hai tùy chọn để xác định các khóa tổng hợp. chú thích @IdClass và @EmbeddedId.

Khóa chính tổng hợp có tốt không?

Không có kết luận rằng các khóa chính tổng hợp là xấu . Cách tốt nhất là có một số cột hoặc nhiều cột xác định duy nhất một hàng. Nhưng trong một số bảng, bản thân một cột không đủ để xác định duy nhất một hàng. SQL [và mô hình quan hệ] cho phép khóa chính tổng hợp.

Chủ Đề