Я довольно новичок в CakePHP (и в целом в фреймворках), использую версию 1.3, и натолкнулся на стену, которую я не могу найти подходящим / полезным / понятным объяснением где-либо (в документации Cake, на stackoverflow или множество поисков в Google, которые дали менее чем полезные результаты.) Может случиться так, что моему слабому мозгу нужно кормить ложкой конкретное решение, а не пытаться собрать одно из множества разных примеров, но я в недоумении, поэтому любая помощь высоко ценится! Моя ситуация такая:
Мое приложение для управления церковными ресурсами. Мне нужно отобразить ресурсы для пользователя в зависимости от его «местоположения» (подробнее об этом в секундах). Способ назначения местоположения пользователя зависит от того, к какой церкви он принадлежит, и, в свою очередь, к какому району принадлежит церковь. Ресурсы принадлежат округам, и поэтому я хочу показать пользователю в округе А только ресурсы, которые принадлежат округу А.
В моей базе данных у меня есть таблицы для users
, churches
, districts
и items
(он же "отдельный" ресурс), среди прочих, но это единственные, имеющие отношение к моей проблеме. Таким образом, у меня есть модели для User
, Church
, District
и Item
. Отношения определяются так:
District hasMany Church
District hasMany Item
Church hasMany User
Church belongsTo District
User belongsTo Church
Item belongsTo District
Как видите, между Item
и User
не определена прямая связь, но по сути, мне нужно сделать следующее:
$items = $this->paginate(array('Item.district_id LIKE' => 'User.district_id'));
Очевидно, что это не работает, как задумано, и просто приводит к тому, что пустой массив передается на мой взгляд.
Обратите внимание, что в моей базе данных таблица users
не имеет поля district_id
- все ассоциации с районом пользователя производятся с помощью отношения User->Church.district_id
. Я не могу сослаться на модель User
в items_controller.php
, чтобы получить район пользователя напрямую, поскольку он просто выдает ошибку. Я пытался использовать «контейнерное поведение», но безрезультатно, но у меня есть ощущение, что «контейнер» - это путь, по которому мне нужно идти. Я просто не могу понять, как собрать все это вместе, чтобы оно работало. Ниже приведен соответствующий код, который у меня есть в items_controller.php
, - на данный момент он довольно скудный, так как я просто пытаюсь заставить его перечислять только соответствующие элементы ... Я включу поиск и все остальное позже. Мне просто нужно знать, что сейчас я могу заставить его работать на самом базовом уровне.
items_controller.php
function admin_manager() {
$this->paginate['Item'] = array(
'contain' => array('User'),
'order' => 'Item.name'
);
$items = $this->paginate(array('Item.district_id LIKE' => 'User.district_id'));
$this->set('items', $items);
}
Большое спасибо за вашу помощь, и я смиренно прошу вас быть максимально конкретными с любыми примерами.