Intereting Posts
Могу ли я войти в защищенный каталог по ссылке? Сортировка массива по ключам на основе другого массива? Форма внутри выпадающего списка TbNavbar Чтение текстового файла и сравнение строки с той же строкой возвращает false получить ответ «победа / отказ» от mysqli_query Выбор пути к папке с использованием файла типа ввода wp_mail возвращает true, но не получает почту Исключено исключение «PPConnectionException» в адаптивном платежном платежном платеже PayPal Как обрабатывать ввод пользователем недопустимых символов UTF-8? PHP: удалить объект из массива Отправка новостных бюллетеней HTML с помощью простого текстового резервного копирования Изменение id и свойства div при изменении размера окна в jquerymobile Возврат коллекции после обновления ()? Отправить письмо в php с прикрепленным файлом, который создается из базы данных после установки magento на моей локальной машине я забыл пароль администратора

CakePHP – несколько моделей для одной таблицы

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

Как правило, существуют три типа пользователей: администратор , диспетчер местоположений и эксперт .

Кажется, возникла необходимость рассматривать эти три роли как отдельные модели в моем приложении (представьте, как у меня будет другое представление для каждой роли с разными параметрами и т. Д.) Это кошмар.

Как мне настроить отношения в каждой модели.

Моя первая мысль:

//Administrator Model class Administrator extends User { $name = 'Administrator'; $table = 'User'; $belongsTo = array( 'User' => array( 'className' => 'User', 'conditions' => array('User.role' => 'administrator'), ) ); } 

И тогда модель User будет ссылаться на эту, используя hasMany? В терминах конвенции CakePHP, как бы на самом деле точно это моделировать?

Кроме того, будет ли эта модель расширять модель User или AppModel?

Конечно, вы можете создавать разные модели, используя одно и то же имя таблицы. Для этого свяжите каждую модель с определенной таблицей с использованием свойства $ useTable (а не $ table):

 class Administrator extends AppModel { public $useTable = 'User'; } 

Но я не знаю никакого свойства модели CakePHP, которое позволит вам фильтровать данные, возвращаемые при извлечении результатов … Вы можете писать свои собственные условия только при связывании модели с другой, например:

 class SomeOtherModel extends AppModel { public $hasMany = array( 'Administrator' => array( 'className' => 'Administrator', 'conditions' => array('Administrator.role' => 'administrator') ) ); } 

Это не очень хорошее решение, потому что оно будет работать только при выполнении запросов для модели SomeOtherModel.

Вы также можете попробовать применить обратный вызов afterFind () к вашим моделям Administrator / Examiner / …, которые будут удалять пользователей другой роли, чем необходимо, но, конечно, это не эффективное решение.

Другое решение – это просто создание разных представлений базы данных, в которых будут присутствовать только пользователи выбранной роли (подробнее о представлениях – здесь ). Затем вы можете указать каждое представление на вашу модель CakePHP, так же, как это была обычная таблица базы данных. Но это решение также не идеально. Если вам нужно будет добавить новую роль пользователя или изменить схему таблицы в будущем, вам также придется изменить свои представления в базе данных.