【问题标题】:Looping through associated data in CakePHP在 CakePHP 中循环关联数据
【发布时间】:2014-06-19 12:05:20
【问题描述】:

我正在通过 CakePHP 摸索,尝试复制我在原版 PHP 中已经可以做的事情。

我有 2 张桌子,events 和 eventlist。 events 包含有关事件的一般信息。 eventlist 包含在每个事件页面上显示为项目符号列表的信息。

eventlist 由一个 id、一个将每个条目链接到event 表中的相关事件的 event_id 和一个显示在页面上的字符串组成。在普通 PHP 中,我只需 SELECT list_info FROM eventlist WHERE event_id = 1 或其他任何内容,然后循环遍历生成的数组。

但是,我不知道在 CakePHP 中从哪里开始,而且我不确定如何搜索它来找出答案。

我已经在两个表之间创建了一个关联:

class Event extends AppModel{

    public $hasMany = array(
        'EventList'
        );

}

类 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 中做一些事情来将数据加载到数组中。任何帮助表示赞赏。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    默认情况下,您设置的关系应在您查询事件时返回相关数据。有多种方法可以获取可显示格式的数据,例如使用 HTML 助手输出(无)有序列表。但是,下面的示例应该会有所帮助。

    此外,调试在控制器中查找记录的结果的快速方法是使用pr(print_r 的别名),如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,每个表中的数据都存储在其中那些钥匙。

    【讨论】:

    • 我知道这很简单,但只有你知道语法才会简单:) 谢谢。
    • 补充问题:我可以将EventList 输出到未排序的列表中:echo $this-&gt;Html-&gt;nestedList($listItem); 但这会输出表的 all,包括键。如何将字符串列 (event_list) 输出到我的列表中?
    • 这也可以通过多种方式处理。最简单的可能是在查询中设置fields 参数以返回EventList 对象的id 和name。然后,使用 HTML Helper 输出列表,如 $this->Html->list($event['EventList']);或者,您可以在控制器中单独查询事件列表作为列表,并使用 HTML 帮助器:$eventList = $this-&gt;Event-&gt;EventList-&gt;find('list', ['conditions' =&gt; ['event_id' =&gt; $event_id]]);
    • 在第一个例子中,我假设我在我的EventListController?目前是空的(除了类声明)。
    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多