0

我试图在我的模型中加入这个规则

'Email' =>  'email|unique:tablename,coloumntoignore,ignoreid',

上面的规则是检查除了要提供的id之外的唯一列ignoreid

我在这里面临两个问题

我正在获取用户输入

$DriverData = Input::except(array('_token'));

并将其发送给模型

$validation  = Validator::make($DriverData, DriverModel::$updaterules);

注意:此更新不是自我更新,因此我无法获取它,Auth::user()->id并且我的主键不是id

我检查它

'Email' =>  'email|unique:driver_details,email,4',

它告诉我错误

Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from `driver_details` where `email` = allaudeen.s@gmail.coms and `id` <> 4)

虽然我提到了protected $primaryKey = 'DriverId';

那么,我怎样才能获得模型内字段的值,以便我应该检查规则以检查唯一列,除了它的列

注意:将 DriverId 放在控制器的会话中并像这样到达这里的肮脏方式不是首选。

4

2 回答 2

1

如果您使用资源丰富的路由/控制器,则您尝试更新的记录的 id 应该是传递给控制器​​中更新方法的参数。

如果您没有使用资源丰富的路由/控制器,那么您正在更新的记录的 id 需要与其他表单数据一起传递。

至于验证规则,由于您的 id 字段不是id,您需要告诉规则。unique 规则的第四个参数是 id 字段的名称。关于唯一规则的文档在这里

'Email' =>  'email|unique:driver_details,email,4,DriverId',

一旦您弄清楚如何获取正在更新的记录的 id,您将需要弄清楚如何将该 id 注入您的电子邮件规则。由于看起来您的规则被定义为 上的静态属性,因此DriverModel您可能想在此处查看此问题/答案。基本上,您的规则中需要一个占位符,然后是模型上的一个静态方法,可以用您指定的 id 替换占位符:

class DriverModel extends Eloquent {
    public static $updaterules = array(
        'Email' => 'email|unique:driver_details,email,%1$s,DriverId'
    );
    public static function getUpdateRules($id = 'NULL') {
        $rules = self::$updaterules;
        $rules['Email'] = sprintf($rules['Email'], $id);
        return $rules;
    }
}

// usage
$validation  = Validator::make($DriverData, DriverModel::getUpdateRules($id));
于 2015-01-29T02:24:33.083 回答
0

尝试

'email' => 'unique:table,email_column_to_check,id_to_ignore'
replace segments table, email_column_to_check, id_to_ignore in above example

参考: http: //laravel.com/docs/4.2/validation#rule-unique

于 2020-11-24T06:53:23.897 回答