我有一个如下所示的db表:
Schema::create('types', function($table)
{
$table->increments('id');
$table->string('label', 128);
$table->boolean('unique_items');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
我的验证目前看起来像这样:
// Validate input for new Type
$validator = Validator::make(Input::all(),
array(
'label' => 'required|min:3|max:128|unique:types',
)
);
我希望用户能够创建Type
label
,user_id
对于1
是唯一的。因此,如果用户Type
将books
标记为2
,则无法创建另一个,但用户books
也可以创建id
类型。
据我所知,从Laravel文档中,只能将用户从唯一搜索中排除,但不能根据他们的{{1}}进行比较。有办法解决这个问题吗?
答案 0 :(得分:1)
您可以添加额外的where子句以创建复合唯一项,例如:
"label" => "required|min:3|max:128|unique:types,label,null,id,user_id,{$user_id}"
您需要在此处传递$user_id
,这样才能确保某个类型仅对此用户唯一。您可以在model/Type
内声明一个方法,如下所示:
public function setUniqueValidationRuleForType($user_id)
{
static::$rules["label"] = "required|min:3|max:128|unique:types,label,null,id,user_id,{$user_id}";
return $this; // This is optional
}
现在,在创建新条目之前,只需调用此方法以允许具有您传入方法的ID
的用户的另一个条目。您也可以查看documentation here。