CakePHP的。如果该表的唯一引用列是id列,我如何访问表的其他列

时间:2016-07-08 12:16:11

标签: cakephp

我将TableA引用TableB的id列作为外键。下面的代码输出TableB的id,所以我想使用这个id来访问这个实体的其余列。我该怎么做?

这是下面的index.ctp

<td><?= $tableA->has('tableB') ? $this->Html->link($tableA->$tableb_id->, ['controller' => 'TableA', 'action' => 'view', $tableA->TableB->id]) : '' ?></td>

1 个答案:

答案 0 :(得分:1)

在使用包含功能时,CakePHP 3.0将使用下划线单数命名约定(对于BelongsTo和hasMany的下划线复数)将关联表附加到每个实体。

所以在你的控制器中你会找到这样的记录。

public function index() {
     $tableA = $this->TableA->find()->contain('TableB')->first();
     $this->set(compact('tableA'));
}

以上将找到第一条记录,以及相关的TableB记录。我们可以通过使用调试功能来看到这一点。

     $tableA = $this->TableA->find()->contain('TableB')->first();
     debug($tableA->toArray());

在您的视图中,您可以将TableB作为$ tableA

的属性进行访问
    // will output the association TableB
    debug($tableA->table_b_id); // the ID column
    debug($tableA->table_b); // all of TableB columns

您应该在命令行上学习Cake烘焙功能,因为这会将@property注释添加到实体类中以进行关联。

您可以像这样烤TableA

$ bin/cake bake model TableA

这将创建src/Model/Entity/TableA.phpsrc/Model/Table/TableATable.php

对于TableA.php实体,它将有一个像这样的评论块。

/**
 * @property int id
 * // more properties
 *
 * @property \App\Model\Entity\TableB $table_b
 */ 
class TableA extends Entity {
   // ...
}

只要您遵循Cake的惯例,并使用Bake功能。可以为您设置很多这样的功能。更容易找到相关数据。这些@property功能还支持PHP中的PhpStorm,Eclipse和其他IDE中的自动完成功能。