如何从Cake 3.0中的关联hasMany模型中获取行?

时间:2015-08-04 17:30:07

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

//PagesTable.php
class PagesTable extends Table
{
    public function initialize(array $config)
    {
        $this->belongsTo('Books');
    }
}

//BooksTable.php
class BooksTable extends Table
{
    public function initialize(array $config)
    {
        $this->hasMany('Pages');
    }
}

从上述两个模型中,我想要检索BooksController中属于特定图书的页面。

经过几个小时的文档记录后,我以某种方式构建了这个能够实现我想要的东西。

$pages = $this->Books->Pages->find()->where(['Pages.book_id' => $id]);

我有一种感觉,我没有在这里利用蛋糕,因为它看起来像我正在构建自定义查询而不是仅仅拉动相关数据。但作为蛋糕3.0的初学者(没有蛋糕2.x的经验),这是我能做的最好的。

  • 我走对了路吗?

  • 是否有更好的方法来查找图书的页面(关联的hasMany模型的行)?

1 个答案:

答案 0 :(得分:0)

有一种更简单的方法可以检查: 在控制器中

$maestro = $this->Maestro->get($id, [
'contain' => ['DetalleMaestro']]);
$this->set('maestro', $maestro);

在db中搜索所有maestro记录和相关记录detallemaestro 在视图中

    <?php if (!empty($maestro->detalle)): ?>
    <h5><?= __('Fuentes de Informacion Asociadas') ?></h5>
    <table cellpadding="0" cellspacing="0">
        <tr>
            <th><?= __('Nombre 1') ?></th>
            <th><?= __('Nombre 2') ?></th>
            <th><?= __('Nombre 3') ?></th>
            <th><?= __('Nombre 4') ?></th>
        </tr>
        <?php foreach ($maestro->detalle as $detalle): ?>
        <tr>
            <td><?= h($detalle->1) ?></td>
            <td><?= h($detalle->2) ?></td>
            <td><?= h($detalle->3) ?></td>
            <td><?= h($detalle->4) ?></td>
        </tr>

    <?php endforeach; ?>
</table>
<?php endif; ?>

检查Maestro是否有关联并显示