CakePHP 3.6.11: создать раскрывающийся список в ctp с другого контроллера

У меня есть 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

Изучите руководство для блога в официальной документации. Очевидно, вы не читали о самых простых задачах, таких как передача переменной на уровень представления. Ваш подход к тому, чтобы вас кормили с ложечки, ошибочен, начните структурированное обучение с чтения документации.

floriank 26.09.2018 14:24

@burzum спасибо за вашу рекомендацию, но я все еще не могу найти в учебнике, как передать список Services из CustomerController в представление. Буду рад, если вы приведете пример

netdev 26.09.2018 15:00

@burzum, пожалуйста, проверьте обновленный пост.

netdev 26.09.2018 15:31

Я думаю, что более серьезная проблема здесь в том, что на самом деле существует связь между клиентами и услугами на основе вашего сообщения. У клиента может быть много услуг, а услуга может принадлежать множеству клиентов. Вам следует провести рефакторинг таблиц Cake, чтобы отразить эту взаимосвязь и соответственно получить доступ к необходимым данным.

Derek Fulginiti 26.09.2018 18:41

@DerekFulginiti, дело в том, что я не хотел устанавливать прямые отношения, потому что клиент может быть без каких-либо услуг, а услуга может быть без какого-либо клиента, поэтому я использую таблицу customerServices ... Но, конечно же, как новичок, я не знаю, лучший ли это способ

netdev 27.09.2018 08:08

Хорошо. Вы все равно должны настроить связь "многие-многие" между двумя таблицами через объединенную таблицу customerServices.

Derek Fulginiti 27.09.2018 11:44

@netdev book.cakephp.org/3.0/en/tutorials-and-examples/cms/… Страница, объясняющая MVC, также упоминает эту концепцию, а также главу о представлении. Прочтите документацию.

floriank 27.09.2018 14:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В документации есть раздел под названием Получение экземпляров класса таблицы, в котором показано, что именно вам нужно:

TableRegistry::getTableLocator()->get('Services')->find(...)

Другие вопросы по теме