1

我正在尝试保存到数据库,如果它已经在数据库中,我希望忽略该帖子。这就是我目前保存它的方式。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();
}
4

3 回答 3

5

在尝试保存之前,对您希望唯一的任何字段使用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');
}
于 2013-08-12T17:16:24.353 回答
2

如果帖子已经具有您要设置的唯一 ID,您可以Post::findOrFail(UNIQUE_ID)在结构中使用它来回退。try ... catch ...

于 2013-08-12T14:15:52.793 回答
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');
    }
}
于 2013-08-13T06:10:40.600 回答