Khóa chính mysql uuid

Trước hết, hãy nhìn vào địa chỉ của Github Gist. https. //ý chính. github. com/thangngoc89/db6493759aa0e9bdb59d mỗi Gist được gắn một chuỗi băm duy nhất (ví dụ db6493759aa0e9bdb59d). Không có 2 ý chính có cùng 1 mã băm

Tuy nhiên, chúng ta không hề có cấu trúc nào để lưu trữ hàm băm trong lược đồ (cấu trúc của cơ sở dữ liệu). Cách giải quyết vấn đề thường gặp nhất đó là tạo thêm 1 tên cột mới là hàm băm trong ý chính và tạo 1 hàm băm ngẫu nhiên mỗi khi có ý chính mới. Nhưng như vậy thì chúng ta có riêng 1 cột id Chỉ mục đích tự động tăng (auto-increment) mà không hề có bất kỳ chức năng nào khác trong bảng. Tại sao chúng ta không nhập chung cột hash và cột id thành một. Và đặt cột đó làm bảng chính của bảng?. nghe được đó

Một lợi ích khác của cách này đó là người khác không thể biết tổng số bản ghi có trong bảng của bạn. Một dạng địa chỉ thường thấy của blog home-growth (tự phát triển) có dạng http. //thí dụ. com/my-blog-slug-here/id. And id normal is auto-increment key (mà 99% là như vậy). Nếu bạn là một công ty kinh doanh, đối thủ của bạn có thể dễ dàng tìm ra tổng số bản ghi bằng cách tăng dần id lên khi có lỗi 404. . nụ cười

Nhiều bạn sẽ nói rằng hầu hết các blog đều không có phần id ở cuối tuy nhiên theo kinh nghiệm cá nhân, lộ trình như vậy là tối ưu nhất để tránh phức tạp về sau liên quan giữa sên và tiêu đề

Hay đơn giản là nhìn vào ứng dụng Gist của chúng ta. 1 Gist could have a public/private status. Nhưng nếu chúng ta sử dụng auto-increment id thì ý chính riêng của chúng ta sẽ dễ dàng tìm ra (giả sử chúng ta không kiểm tra tên người dùng)

#UUID

Long lines thế là đủ rồi. Bây giờ quay lại chủ đề chính. UUID là gì ? . Nếu các bạn quan tâm, các bạn có thể tìm hiểu về UUID chuẩn tại đây

Một chuỗi UUID cơ bản có định dạng như sau. 6ba7b810-9dad-11d1-80b4-00c04fd430c8 gồm 36 ký tự. 32 ký tự xưng [a-z0-9] và chia thành 4 nhóm bởi 4 dấu - (gạch nối). Vì 1 UUID khá dài nên chúng ta chỉ lấy 7 ký tự đầu tiên và hiển thị ra bên ngoài (còn lưu đầy đủ UUID trong cơ sở dữ liệu)

#di cư

Chúng ta đã biết cấu trúc của một ID UUID, hãy chỉnh sửa lại quá trình di chuyển để áp dụng UUID vào Gist

Lưu ý. Chúng ta còn đang trong giai đoạn cấm đầu, việc sửa đổi trực tiếp việc di chuyển tệp là chấp nhận được. Nếu như các bạn đang làm dự án đã được triển khai (và có dữ liệu thực tế). Vui lòng tạo thêm 1 tệp di chuyển mới và áp dụng các thay đổi đã sửa đổi trong tệp này

Việc sửa đổi di chuyển tệp rất đơn giản, những nơi có kiểu dữ liệu là INT(10) mình sẽ chuyển thành VARCHAR(36). Ở đây mình đã sửa đổi sẵn các file migration, các bạn có thể tham khảo thêm

// yyyy_mm_dd_xxxxxxx_create_users_table. php hàm hàm lên() { Lược đồ. tạo( 'người dùng' , function(Bản thiết kế $table) { $table->string( 'id' , 36 )->index()->unique(); . php 'id' ); . php 'tên' ); . php 'tên người dùng' , 20 )->nullable()->default( null )->unique(); . php 'email' )->nullable()->default( null )->unique(); . php 'mật khẩu' , 60 ); . php // yyyy_mm_dd_xxxxxxx_create_gists_table. php hàm hàm lên() { Lược đồ. tạo( 'các chuyên gia' , function(Bản thiết kế $table) { $table->string( 'id' , 36)->index()->unique(); 'id'); 'user_id' , 36)->nullable()->index(); 'tiêu đề'); 'nội dung'); 'công khai'); 'user_id' )->tham chiếu( 'id' )->on( 'users' )->onDelete( 'SET NULL');

See 2 file full at gist#e24d7b64ba

#Người mẫu

Mặc dù vậy, Eloquent model will use the column id auto-increment to make main key (primary key) of model. Chúng ta cần áp dụng thay đổi nhỏ để Eloquent có thể hiểu được chúng ta đang sử dụng UUID thay cho giá trị tăng tự động

Trong file app/Gist. thêm php vào

công khai $incrementing = sai ; . khởi động(); . tạo( công khai tĩnh chức năng khởi động() { cha mẹ . khởi động(); . tạo( tĩnh . tạo( function ($model) { $model->{$model->getKeyName()} = Uuid. tạo ( 4);

Mình quên một chỗ là chúng ta sẽ sử dụng gói Laravel-Uuid để tạo UUID nhanh

Cài đặt nhanh

nhà soạn nhạc yêu cầu webpatser/laravel-uuid

Chúng ta không cần thêm bí danh cho Uuid Facades vì ​​chúng ta hầu như không sử dụng nó (sẽ thêm khi cần thiết)

And in app/Gist. php nhớ nhập Class Uuid

sử dụng Webpatser\Uuid\Uuid;

Ở đây có 2 chỗ chúng ta cần quan tâm, đó là

công khai $incrementing = sai;

Thông báo là báo cho Eloquent know will not have the auto-increment value (chi tiết)

Tiếp theo là

công khai tĩnh chức năng khởi động() { cha mẹ . khởi động(); . tạo( tĩnh . tạo( function ($model) { $model->{$model->getKeyName()} = Uuid. tạo ( 4);

This is known as Model-events you can see docs of Laravel 5. 0 để hiểu rõ hơn. Model event xứng đáng với một bài viết riêng. Mình chỉ giải thích ngắn gọn trước khi một mô hình được tạo (tức là 1 hàng trong bảng - xem lại bài viết trước về Active Record Pattern). Đoạn mã chúng ta thêm vào sẽ tạo một Uuid và gắn vào khóa chính (lấy khóa chính bằng $model->getKeyName())

#Cấu trúc lại

Như vậy là chúng ta đã hoàn thành việc sử dụng Uuid trong Gist Model. Nhưng theo như file migration ở trên, chúng ta muốn sử dụng cho cả User Model. Giải pháp? . 100% is will active. Nhưng giải thích chúng ta muốn bổ sung thêm chức năng bình luận? . Đ. Mình sẽ chỉ các bạn cách đơn giản hơn. Đầu tiên tạo file app/UuidModel. php with content

không gian tênÝ chính; . khởi động(); . tạo(function($model){ $model->{$model->getKeyName()} = Uuid. tạo (4); không gian tên Ý chính ; . khởi động(); . tạo( sử dụng Chiếu sáng \ Cơ sở dữ liệu \ Hùng hồn \ Mô hình ; . khởi động(); . tạo( sử dụng Webpatser \ Uuid \ Uuid ; . khởi động(); . tạo( lớp UuidModel mở rộng Mô hình { công khai tĩnh chức năng khởi động() { cha mẹ . khởi động(); . tạo( tĩnh . tạo( function ($model) { $model->{$model->getKeyName()} = Uuid. tạo ( 4);

Sau đó trong Mô hình Gist thay vì ban đầu là

lớpÝ chínhmở rộngMô hình lớp Ý chính mở rộng Mô hình{}

Chúng ta sửa lại

lớpGistmở rộngUuidModel lớp Ý chính mở rộng UuidModel { công khai $incrementing = sai;

Làm tương tự với User Model. Như vậy từ nay, khi muốn sử dụng Uuid cho bất kỳ Model nào, chúng ta chỉ đơn giản làm như vậy

Lưu ý. $incrementing công khai = sai; . php nhưng vì li do nào mà nó làm PHPUnit fail nên mình tạm thời đặt nó ở đây. Will refactor next khi cần thiết

#kết luận

Qua bài này, chúng ta đã biết cách sử dụng Uuid với Eloquent Model. Chúng ta đã sửa và thêm vào không quá 20 dòng mã. Tất cả đều nhờ vào sự "thần kỳ" của Laravel