2015-03-26 4 views
2

Я использую Laravel 5. Следующий ввод данных для категорий возвращается в значениях, разделенных запятыми. бизнес, домашний ремонт, полы.Возврат взятых полей перед отправкой в ​​базу данных

// Insert tile tags 
    $data  = array(); 
    $tag_title = $request->tag_title; 

    $data = explode(',', $tag_title); 

    foreach($data as $newTag) { 

     $tag = new Tag; 
     $tag->tag_title = $newTag; 
     $tag->save(); 

    } 

Проблема есть, вторая категория домашний ремонт уже существует в таблице, которая необходима, чтобы быть уникальным и вызывает очевидное ограничение, таким образом предотвращая любой код, который следует потерпеть неудачу.

Как я могу сначала проверить, есть ли какая-либо из этих категорий/тегов, а затем вернуться к пользователю, которые выполняются при добавлении нового тега?

Или лучше было бы, по моему мнению, проверить записи и вставить только те, которые еще не существуют в таблице. Кажется, много чище. Можно ли это сделать в Ларавеле?

+2

'INSERT IGNORE INTO' может быть тем, что вы ищете, не уверен, как это делается в Ларавале, к сожалению. – Daan

+1

Вы пытались использовать 'firstOrFail()'? - 'try {Model :: where (conditions) -> firstOrFail()} catch (ModelNotFoundException $ e) {Model :: create (data)}' –

ответ

2

Вы, вероятно, можно использовать firstOrCreate ...

foreach($data as $newTag) { 

    $temp = Tag::firstOrCreate(array('tag_title'=>$newTag)); 

} 

... так что если тег с tag_title пока не существует, она будет создана.

+2

Также не забудьте добавить 'tag_title' в' $ fillable' массив в вашей модели (если вы еще этого не сделали) – lukasgeiter

+0

Perfect. Спасибо огромное! –