Laravel 4:唯一(数据库)未验证

时间:2014-02-15 13:08:45

标签: php mysql validation laravel-4 unique

我正在创建一个基本的CMS来自学Laravel和PHP的基础知识。

我有一个'pages'表,我正在存储一个url_title。出于显而易见的原因,我希望此URL标题是唯一的。但是,无论我做什么来验证它,都会失败。无论如何它只是保存。我确信这很简单。你能发现这段代码有什么问题吗?

我也在视图中使用Former,也没有验证。我尝试将值硬编码为唯一方法中的最后一个选项,它也失败了。
http://anahkiasen.github.io/former/

http://laravel.com/docs/validation#rule-unique
状态:唯一:表,列,除了,idColumn

这是我的控制器:

public function store()
{
    $validation = Pages::validate(Input::all());

    if($validation->fails()) {
      Former::withErrors($validation);
      return View::make('myview');
    } else {
        Pages::create(array(
            'title'             => Input::get('title'),
            'url_title'         => Input::get('url_title'),
            'status'            => Input::get('status'),
            'body'              => Input::get('body'),
            'seo_title'         => Input::get('seo_title'),
            'seo_description'   => Input::get('seo_description')
        ));

        //check which submit was clicked on
        if(Input::get('save')) {
            return Redirect::route('admin_pages')->with('message', 'Woo-hoo! page was created successfully!')->with('message_status', 'success');
        }
        elseif(Input::get('continue')) {
            $id = $page->id;
            return Redirect::route('admin_pages_edit', $id)->with('message', 'Woo-hoo! page was created successfully!')->with('message_status', 'success');
        }
    }

}

这是我的模特:

class Pages extends Eloquent {

   protected $guarded = array('id');

   public static $rules = array(
        'id'            => 'unique:pages,url_title,{{$id}}'
   );

   public static function validate($data) {
       return Validator::make($data, static::$rules);
   }
}

我尝试了以下内容:

 public static $rules = array(
    //      'id'=> 'unique:pages,url_title,{{$id}}'
    //      'id'=> 'unique:pages,url_title,$id'
    //      'id'=> 'unique:pages,url_title,:id'
    //      'id'=> 'unique:pages,url_title,'. {{$id}}
    //      'id'=> 'unique:pages,url_title,'. $id
 );

有什么想法吗?我跟那个创造了前者的人交谈过。他也不能为此做头或尾。他建议追踪它以找到我们用什么查询Laravel来检查唯一性并尝试直接在我的数据库中运行它以查看会发生什么。我找不到要执行此操作的查询。有谁知道在哪里追踪它?

非常感谢

2 个答案:

答案 0 :(得分:0)

你的规则应该是:

public static $rules = array(
    'url_title' => 'unique:pages,url_title,{{$id}}'
);

正如我从您的代码Input::get('url_title')中猜到的那样 您必须使用表单中使用的field名称。

答案 1 :(得分:0)

谢谢偷看。我一直在使用Laravel独特的解决方案,但效果不佳。我发现这个包可以很好地解决这个问题。

https://github.com/cviebrock/eloquent-sluggable#eloquent

绝对值得一看。

感谢您的反馈。