在laravel中将对象保存到数据库时如何检查唯一键?

时间:2013-08-12 14:09:29

标签: laravel laravel-4 eloquent

我正在尝试保存到数据库,如果已经在数据库中,我希望忽略该帖子。这就是我目前保存它的方式。 postid必须是唯一的。

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();
}

3 个答案:

答案 0 :(得分:3)

在尝试保存之前,在您想要独特的任何字段上使用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');
}

答案 1 :(得分:2)

如果帖子中已有您要设置的唯一ID,则可以Post::findOrFail(UNIQUE_ID)try ... catch ...结构中使用{{1}}进行后备。

答案 2 :(得分:0)

您可以在验证中检查唯一性。我不确定你是否正在检查独特的主要postid。我建议你把postid作为主键和&自动递增。您可以匹配帖子标题以进行复制。

$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');
    }
}