2013-06-07 43 views
28

Tôi đang nhập một loạt các mục csv trong cơ sở dữ liệu của mình với Laravel 4.Laravel 4: kết hợp các giá trị/cột duy nhất

Tôi thực sự không thể chỉ ra một cột nào là duy nhất, đó là một sự kết hợp của 5 cột mà làm cho nó độc đáo. Tuy nhiên: làm thế nào để xác định điều này trong Laravel?

Lựa chọn 1: schema builder
Bạn có thể sử dụng $ Bảng-> Phương pháp độc đáo ('email'), nhưng điều đó dường như chỉ để cho phép một cột, không phải là một sự kết hợp của các cột.

Tùy chọn 2: Xác thực
Ít hơn, nhưng tôi có thể xác thực mô hình trước khi chèn. Tuy nhiên, một lần nữa, sử dụng quy tắc xác thực 'duy nhất: [bảng]', nó sẽ trả về lỗi khi chỉ một trong các giá trị cột không phải là duy nhất, không phải là kết hợp của chúng.

Bất cứ ai có thể cho tôi biết cách tôi nên thực hiện việc này?
Tôi chắc rằng tôi đang thiếu một cái gì đó, nhưng tôi có thể sử dụng một đẩy đúng hướng :-)

Cảm ơn,

Dieter

Trả lời

72

Bạn có thể kết hợp:

$table->unique(array('email','name')); 

Và khá nhiều thứ trong Laravel sẽ chấp nhận các mảng để làm bất cứ điều gì bạn cần với 'nhiều hơn một'.

+8

Nhưng làm thế nào để xác nhận hợp lệ các khóa duy nhất, tôi có nghĩa là phần thứ hai sử dụng xác thực Laravel. Tôi không thể hiểu ví dụ từ trang web laravel? – HariHaraSudhan

+0

@HariHaraSudhan Vâng tôi nghĩ rằng tôi cũng có cùng một [Question] (http: // stackoverflow.com/questions/26683762/how-to-add-kết hợp-duy nhất-fields-validator-rule-in-laravel-4) –

+0

Laravel 5.4 đang sử dụng cùng một cú pháp. –

7

Sử dụng phương pháp unique() của Trình tạo lược đồ để xác định mô hình dữ liệu của bạn, như Antonio đã đề cập.

Ngoài ra, nếu bạn muốn sử dụng xác nhận trên mô hình của bạn, hãy xem xét tùy chỉnh của tôi Validator quy tắc cho nhiều UNIQUE chỉ: https://github.com/felixkiss/uniquewith-validator

+1

Cảm ơn quy tắc xác thực tùy chỉnh! Sẽ được sử dụng mà trên đầu trang của các ràng buộc DB, có vẻ sai lầm dựa vào một ngoại lệ DB cho dòng chảy của chương trình. – Dieter

0

Bạn có thể thử này

$table->string("name"); 
$table->string("email")->unique("name") 
+1

Tôi không hiểu. Tại sao điều này sẽ làm cho email và tên duy nhất như một cặp? – Cristian

0

Tôi biết câu hỏi này là dành cho Laravel 4 , nhưng tôi đã xem xét điều này trên các tìm kiếm và tìm thấy giải pháp cho Laravel> = 5.3

Đây là:

Tất nhiên, sự di cư có thể trông giống như

$table->unique(array('email','name')); 

Sau đó để xác nhận điều này, bạn không cần phải sử dụng quy tắc tùy chỉnh, quy tắc chỉ tiên tiến:

'email' => Rule::unique('users')->where(function ($query) use ($request) { 
    return $query->where('name', $request->name); 
}), 

Tất nhiên, bạn có thể muốn xác thực tên trước đó. Tên nên được yêu cầu để bạn có thể kết thúc với một cái gì đó như thế này:

'name' => 'required|max:255', 
'email' => Rule::unique('users')->where(function ($query) use ($request) { 
    return $query->where('name', $request->name); 
}), 

Tôi hy vọng nó giúp.

Các vấn đề liên quan