У меня есть customers
(идентификатор, имя) и services
(идентификатор, заголовок, isSubscription), я хочу добавить раскрывающийся список в add.ctp
из Customers
, который будет содержать все titles
из Services
, где isSubscription
- это true
. Как я могу этого добиться?
Между Customers
и Services
нет никакой связи, он просто заполнит таблицу customerServices
(Customerid, serviceid) id
конкретного клиента и id
выбранной услуги.
Вот что я пробовал:
в ServicesController.php
в add function
:
$services = $this->Services->find('list'); //the error is here because there is no relationship between Customers and Services
$this->set(compact('services'));
в add.ctp
в Template/Customers
:
$this->Form->control('category',array('options' => $services));
Но я получаю вот что:
Call to a member function find() on boolean
@burzum спасибо за вашу рекомендацию, но я все еще не могу найти в учебнике, как передать список Services
из CustomerController
в представление. Буду рад, если вы приведете пример
@burzum, пожалуйста, проверьте обновленный пост.
Я думаю, что более серьезная проблема здесь в том, что на самом деле существует связь между клиентами и услугами на основе вашего сообщения. У клиента может быть много услуг, а услуга может принадлежать множеству клиентов. Вам следует провести рефакторинг таблиц Cake, чтобы отразить эту взаимосвязь и соответственно получить доступ к необходимым данным.
@DerekFulginiti, дело в том, что я не хотел устанавливать прямые отношения, потому что клиент может быть без каких-либо услуг, а услуга может быть без какого-либо клиента, поэтому я использую таблицу customerServices ... Но, конечно же, как новичок, я не знаю, лучший ли это способ
Хорошо. Вы все равно должны настроить связь "многие-многие" между двумя таблицами через объединенную таблицу customerServices.
@netdev book.cakephp.org/3.0/en/tutorials-and-examples/cms/… Страница, объясняющая MVC, также упоминает эту концепцию, а также главу о представлении. Прочтите документацию.
В документации есть раздел под названием Получение экземпляров класса таблицы, в котором показано, что именно вам нужно:
TableRegistry::getTableLocator()->get('Services')->find(...)
Изучите руководство для блога в официальной документации. Очевидно, вы не читали о самых простых задачах, таких как передача переменной на уровень представления. Ваш подход к тому, чтобы вас кормили с ложечки, ошибочен, начните структурированное обучение с чтения документации.