我在新工作中遇到了一项任务,无法找到有效的解决方案,还有可能的方法吗。
在我的cms应用程序中,我创建了添加页面的选项。可以为多种语言添加页面。因此,在我的数据库中,我有两个表:
pages
id, is_default, page_parent, published, created_at, updated_at, deleted_at
page_translations
id, page_id, content, slug, locale
(其中locale是语言前缀(en,fr,de…))
所以,在创建页面上,您需要填写每种语言的标题和内容。
管理员用户应该不能创建两个标题相同的页面,所以我创建了一个规则:
private function generateRules() {
foreach (AppModelsSiteLanguages::all() as $language) {
$page = $this->getPageInfoFromRequestByLanguage($language);
$rules[$language->code. '.title'] = 'required|unique:page_translations,title,' . $this->generateRuleAppendix($page);
}
return $rules;
}
private function getPageInfoFromRequestByLanguage($language) {
return $this->get($language->code);
}
private function weAreEditingPage($page) {
return key_exists('id', $page);
}
private function generateRuleAppendix($page) {
$append = '';
if ($this->weAreEditingPage($page)) {
$append = ',' . $page['id'];
}
return $append;
}
本质上,这段代码所做的是检查我们正在编辑的页面,并将标题设置为唯一的。问题是,好吧,它正在工作,你不能添加具有相同名称的页面,但是,如果其他语言标题的标题字段相同,它也不会编辑页面。
因此,如果我编辑页面并为en:Test设置标题名称,为fr:Test设置标题,则页面将不会编辑,因为存在唯一规则。
我需要一种能够在编辑时更新所有语言的标题的方法,这些字段可以是相同的,但不能是具有相同名称的两个页面。
我想你的代码中有拼写错误
private function generateRules() {
foreach (AppModelsSiteLanguages::all() as $language) {
$page = $this->getPageInfoFromRequestByLanguage($language);
$rules[$language->code. '.title'] =
'required|unique:page_translations,title,' . $this->generateRuleAppendix($page);
}
return $rules;
}
打字错误在这里
unique:page_translations,title,'$这个->。。。
引号中有一个额外的逗号,请尝试删除它,然后再次检查它是否在中工作