CakePHP访问远端相关表中的数据

时间:2018-03-21 17:21:02

标签: cakephp has-and-belongs-to-many

我有2个表作为belongsToMany,scouts和merit_badges关联。我还需要访问连接表中的数据,因此关系选项设置为“通过”

e.g。在ScoutsTable.php中

$this->belongsToMany('MeritBadges', [
        'through' => 'MeritBadgesScouts'
    ]);

另外,我在merit_badges表中使用了树行为,因为有些merit_badges具有依赖性。因此,merit_badges表有一个parent_id列。

我在scouts中查看列出所有相关merit_badges的视图,我想显示merit_badges parent merit_badge的名称,但是我无法让它返回该值。

简而言之,这就是我在模板中的内容。

<?php foreach ($scout->merit_badges as $meritBadges): ?>
        <tr>
            <td><?= h($meritBadges->name) ?></td>
            <td><?= $meritBadges->has('parent_merit_badge') ? $meritBadges->parent_meritbadge->name : '' ?></td>
        </tr>
?>

'has('parent_merit_badge')'返回false,所以我假设我需要在ScoutTable模型中添加一些内容才能使其正常工作,但我无法弄清楚是什么。这是CakePHP 3.5,顺便说一句。感谢

1 个答案:

答案 0 :(得分:0)

问题不在模型中,而是在此模板的控制器中。我需要将ParentMeritBadges模型传递给模板,如下所示。

public function view($id = null)
{
    $scout = $this->Scouts->get($id, [
        'contain' => ['MeritBadges', 'MeritBadges' => ['ParentMeritBadges']]
    ]);

    $this->set('scout', $scout);
}

完成后,以下工作。

<?php foreach ($scout->merit_badges as $meritBadges): ?>
        <tr>
            <td><?= h($meritBadges->name) ?></td>
            <td><?= $meritBadges->has('parent_merit_badge') ? $meritBadges->parent_merit_badge->name : '' ?></td>
        </tr>
?>