我将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>
答案 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.php
和src/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中的自动完成功能。