【问题标题】:Laravel 4: Unique(database) not validatingLaravel 4:唯一(数据库)未验证
【发布时间】:2014-03-14 21:57:24
【问题描述】:

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

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

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

http://laravel.com/docs/validation#rule-unique
状态:unique:table,column,except,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
 );

有什么想法吗?我和创建Former的人交谈过。他也无能为力。他建议跟踪它以找到我们 Laravel 用来检查唯一性的查询,并尝试直接在我的数据库中运行它以查看会发生什么。我找不到执行此操作的查询。有谁知道去哪里找?

非常感谢

【问题讨论】:

  • 在数据库中使用唯一的列,以便复制失败?....如果没有任何效果,至少它可以保持完整性。
  • 谢谢 itachi。我不确定我是否跟随。我正在尝试使用 ID,它是唯一的测试对象,我希望 url_title 也是唯一的。这有意义吗?
  • 如果 id 列是自动递增的,那么无论哪种方式它都是唯一的(意味着不需要针对 id 进行测试)。你只需要看看蛞蝓是否是独一无二的。
  • 啊,好的。这适用于更新条目吗?我想我可以使用一些不同的规则。谢谢伊藤。我对此很陌生,因此非常感谢我能获得的所有帮助。干杯。
  • 你为什么不使用普通的旧 laravel 基本验证?

标签: php mysql validation laravel-4 unique


【解决方案1】:

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

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

绝对值得一看。

感谢您的反馈。

【讨论】:

    【解决方案2】:

    你的规则应该是:

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 2014-08-08
      • 2014-10-12
      • 2015-02-03
      • 2014-12-16
      • 2018-07-29
      • 1970-01-01
      • 2013-05-21
      • 2015-03-24
      相关资源
      最近更新 更多