2013-06-07 2 views
28

Я импортировать кучу записей CSV в моей базе данных с Laravel 4.Laravel 4: делает комбинацию значений/столбцов уникальных

я не могу указать на один столбец, который должен быть уникальным, это сочетание из 5 столбцов, что делает его уникальным. Однако: как определить это в Laravel?

Вариант 1: Схема строитель
Вы можете использовать уникальный метод $ table-> («электронная почта»), но это только кажется, чтобы один столбец, а не сочетание колонн.

Вариант 2: Проверка
менее предпочтителен, но я мог проверить модель, прежде чем вставить его. Однако, опять же, используя правила «unique: [table]», он вернет ошибку, когда только одно из значений столбца не является уникальным, а не их комбинацией.

Может ли кто-нибудь сказать мне, как я должен это делать?
Я уверен, что я что-то не хватает, но я мог бы использовать толчок в правильном направлении :-)

Спасибо,

Dieter

ответ

72

Вы можете комбинировать:

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

И почти все в Laravel принимает массивы, чтобы делать все, что вам нужно, с «более чем одним».

+8

Но как проверить составные уникальные ключи, я имел в виду вторую часть, использующую валидацию laravel. Я не мог понять пример с сайта laravel? – HariHaraSudhan

+0

@HariHaraSudhan Да, я думаю, у меня тоже есть тот же вопрос [http: // stackoverflow.com/questions/26683762/how-to-add-combination-unique-fields-validator-rule-in-laravel-4) –

+0

Laravel 5.4 использует тот же синтаксис. –

7

Использовать метод модели 0unique() Schema Builder, чтобы определить вашу модель данных, как упоминал Антонио.

Кроме того, если вы хотите использовать проверку на вашей модели, рассмотрим мой обычай Validator правило множественного UNIQUE индексов: https://github.com/felixkiss/uniquewith-validator

+1

Спасибо за обычное правило валидатора! Будет использоваться то, что поверх ограничения DB, кажется неправильным полагаться на исключение БД для потока программы. – Dieter

0

Вы можете попробовать это

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

Не понимаю. Почему бы это сделать письмо и имя уникальным как пара? – Cristian

0

Я знаю, что этот вопрос для Laravel 4 , но я просто наткнулся на это при поиске и нашел решение для Laravel> = 5.3

Вот он:

Конечно, миграция может выглядеть как

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

Затем, чтобы проверить это, вам не нужно использовать специальные правила, только усложненные правила:

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

Конечно, вы можете подтвердите имя до этого. Имя должно быть обязательным, чтобы вы могли закончиться примерно так:

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

Надеюсь, это поможет.

Смежные вопросы