Я пытаюсь получить некоторые настройки проверки для одной из моих моделей ORM.
У меня есть 2 таблицы: родитель и дети. В таблице children есть столбец с именем «parent», значение которого является основным идентификатором строки в родительской таблице.
То, что я пытаюсь сделать, – создать правило проверки, которое проверяет, что указанный родительский идентификатор действительно существует в родительской таблице.
Есть простой способ сделать это?
Ну, я придумал одно решение. Я создал статический метод в классе Model, который принимает идентификатор в качестве параметра и просто проверяет, существует ли строка.
Таким образом, моя Model_Child имеет такую же функцию:
public function rules() { return array( 'parent' => array( // will call Model_Parent::exists($value) array(array('Model_Parent', 'exists')) ) ); }
Тогда мой Model_Parent имеет следующее:
public static function exists($id) { $results = DB::select('*')->from('parent')->where('id', '=', $id)->execute()->as_array(); if(count($results) == 0) return FALSE; else return TRUE; }
Это работает для меня. Есть ли более элегантное или правильное решение?
В MySQL (поскольку этот вопрос отмечен как mysql), вы определяете отношение внешнего ключа между родительской и дочерней таблицами и оставляете эту проблему в системе.