2013-08-12 1 views
0

Я пытаюсь сохранить базу данных, я хочу проигнорировать сообщение, если оно уже находится в базе данных. Вот как я сейчас его сохраняю. postid должен быть уникальным.Как проверить уникальный ключ при сохранении объекта в базе данных в laravel?

public function save($type, $postid, $url, $author, $content) 
{ 
    $post = new Post; 
    $post->type = $type; 
    $post->postid = $postid; 
    $post->url = $url; 
    $post->author = $author; 
    $post->content = $content; 
    echo $post; 

    $post->save(); 
} 

ответ

2

Используйте правило проверки Validator 'unique в отношении любых полей, которые вы хотите быть уникальными, прежде чем пытаться сохранить.

$input = array('postid' => $postid); 
$rules = array(
    'postid' => 'unique:posts,postid' 
); 

$validate = Validator::make($input,$rules); 

if($validator->passes()) 
{ 
    $this->save($type, $postid, $url, $author, $content) 
} 
else 
{ 
    $messages = $validator->messages(); 
    echo $messages->first('postid'); 
} 
+0

Примечание '$ validate' должен быть' $ validator'. Я попытался отредактировать ответ, но SO имеет смешную 6-символьную квоту. –

2

Вы можете использовать Post::findOrFail(UNIQUE_ID) использовать его в try ... catch ... структуре Откат если пост уже этот уникальный идентификатор, который вы хотите установить.

+0

Я попробую {Post :: findOrFail ($ сообщение дан);}. Улов (... Кажется, чтобы вызвать улов каждый раз, даже если $ уникально сообщения дана – Himmators

+0

Я использую $ post-> сохранить (), insted, кажется, работает нормально! – Himmators

0

Вы можете проверить уникальность при проверке. Я не уверен, проверяете ли вы уникальный первичный postid. Я бы предложил вам сохранить postid в качестве первичного ключа & auto increment. Вы можете сопоставить заголовок сообщения для дублирования.

$rules = array(
    'postid' => 'required|unique:posts' 
); 

$validator = Validator::make(Input::all(), $rules); 

if($validator->fails()){ 
    return Redirect::back()->withInput()->with('errors', $validator->messages()); 
}else{ 
    $data = array(
     'type' => Input::get('type'), 
     'postid' => Input::get('postid'), 
     'url' => Input::get('url'), 
     'author' => Input::get('author'), 
     'content' => Input::get('content') 
    ); 

    if(Post::create($data)){ 
     Session::flash('messages', 'Post created.'); 
     return Redirect::route('routename'); 
    } 
}