Проверка уникального поля с помощью таблицы соединений HABTM - PullRequest
0 голосов
/ 12 марта 2012

Я изо всех сил пытаюсь выяснить, как проверить поле в модели A, которое должно быть уникальным в сочетании с полем из модели B.

Вот пример, чтобы прояснить мой вопрос:

Page hasMany SitesPage
SitesPage belongsTo Page, belongsTo Site

Страница имеет поле slug, которое должно быть уникальным для всего сайта. Страницы могут быть прикреплены к любому сайту.

Page.id
Page.slug

SitesPage.id
SitesPage.site_id
SitesPage.page_id

У меня есть собственный метод проверки checkUniqueSlug () в моей модели страницы, но я не могу проверить, что слаг уникален для сайта, так как site_id хранится в SitesPage, который недоступен в методе проверки модели страницы ($ this- > данные содержат только данные модели страницы).

Я не могу выполнить проверку в модели SitesPage, так как SitesPage не имеет поля слагов, и я не вижу, что пост страницы является SitesPage.

Как создать пользовательскую проверку, чтобы проверить, является ли слаг уникальным для сайта?

Одно из решений - переместить слаг в модель SitesPage, но нам нужно, чтобы все общие страницы имели одинаковый слаг. т. е. общая страница «О нас» должна содержать слаг «about_us» независимо от того, к какому сайту она прикреплена.

Другое решение состоит в том, чтобы выполнить проверку в контроллере перед сохранением, что сработало бы, но это неправильно, так как проверка должна выполняться в модели.

1 Ответ

0 голосов
/ 22 марта 2012

Поскольку ответов не было, и кто-то другой мог бы обратиться за помощью, вот как я нашел решение:

Поскольку контроллер является единственным местом, где обе данные модели присутствуют в массиве данных, вызов для проверки должен быть выполнен там.

Я выгрузил код проверки в модель и назвал его следующим образом:

if (!empty($this->request->data)) {

  if ($this->Model->specialMultiModelValidate($this->request->data) && $this->Model->save($this->request->data)) {

    // model has validated and saved

  }
  else {

     // model has failed to validate and save

  }

}

Надеюсь, кто-нибудь найдет это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...