#php #cakephp
#php #cakephp
Вопрос:
Я нащупываю свой путь через CakePHP, пытаясь воспроизвести то, что я уже могу делать в ванильном PHP.
У меня есть 2 таблицы, events
и eventlist
. events
содержит общую информацию о событии. eventlist
содержит информацию, которая отображается в виде списка с маркерами на каждой странице события.
eventlist
состоит из идентификатора, event_id, который связывает каждую запись с соответствующим событием в event
таблице, и строки, которая отображается на странице. В ванильном PHP я бы просто SELECT list_info FROM eventlist WHERE event_id = 1
или как угодно, и перебирал результирующий массив.
Однако я понятия не имею, с чего начать с этого в CakePHP, и я не уверен, как я буду искать это, чтобы узнать.
Я уже создал связь между двумя таблицами:
class Event extends AppModel{
public $hasMany = array(
'EventList'
);
}
список событий класса расширяет AppModel{
public $useTable = 'eventlist';
public $belongsTo = array(
'Event'
);
}
И у меня есть простое представление, настроенное для Event
:
<h2><?php echo $event['Event']['event_name'] ?></h2>
<p><?php echo $event['Event']['event_description']?></p>
<h3>£<?php echo $event['Event']['event_cost']?></p>
Но теперь я понятия не имею, что делать — я новичок в CakePHP и MVC в целом. Я предполагаю, что мне нужно что-то EventListController
сделать, чтобы загрузить данные в массив. Любая помощь приветствуется.
Ответ №1:
По умолчанию настроенные вами отношения должны возвращать связанные данные при запросе события. Существует несколько способов получить данные в отображаемом формате, например, с помощью HTML helper для вывода (не) упорядоченного списка. Но приведенный ниже пример должен помочь.
Кроме того, быстрый способ отладки результатов поиска записи в вашем контроллере — использовать pr
(псевдоним для print_r) like pr($event);exit;
. Есть и другие способы отладки, но это быстрый и грязный метод, если вы работаете локально.
Контроллер
$event = $this->Event->findById(`event_id`);
$this->set(compact('event'));
Вид
<h2><?php echo $event['Event']['event_name'] ?></h2>
<p><?php echo $event['Event']['event_description']?></p>
<p>£<?php echo $event['Event']['event_cost']?></p>
<!-- Output each list item in a paragraph -->
<p>
<?php foreach($event['EventList'] as $listItem:
echo $listItem['ListItemColumn'];
endforeach; ?>
</p>
Снова…много-много способов получить и вывести эти данные, но суть в том, что возвращаемые результаты должны иметь ключ массива Event
и ключ массива EventList
с данными из каждой таблицы, хранящимися в этих ключах.
Комментарии:
1. Я знал, что это будет просто, но это просто, только если вы знаете синтаксис 🙂 Спасибо.
2. Дополнительный вопрос: таким образом, я могу вывести
EventList
в неупорядоченный список:echo $this->Html->nestedList($listItem);
но при этом выводится вся таблица, включая ключи. Как я могу просто вывести строку column (event_list
) в свой список?3. Это тоже можно обработать несколькими способами. Самым простым может быть установка
fields
параметра в вашем запросе на returnid
иname
объекта EventList . Затем используйте помощник HTML для вывода списка типа $this-> Html-> list($event[‘EventList’]); Или вы можете запросить список событий отдельно в вашем контроллере в виде списка и использовать помощник HTML:$eventList = $this->Event->EventList->find('list', ['conditions' => ['event_id' => $event_id]]);
4. В первом примере я предполагаю, что я устанавливаю это в моем
EventListController
? который на данный момент пуст (кроме объявления класса).