我的应用中有两张桌子:'客户'和'约会'
在约会表中,我有一个名为'clientid'的外键,它将表链接在一起。如何显示该用户的约会?
例如,在查看客户端/admin/clients/view/201/
时,我会看到客户端201的客户端详细信息以及该客户端的约会。
到目前为止,我的控制器看起来像这样:
class ClientsController extends AppController
{
var $name = 'Clients';
function beforeFilter()
{
parent::beforeFilter();
$this->Auth->allow(array('*'));
}
function admin_view($id = null)
{
$this->Client->id = $id;
$this->set('client', $this->Client->read());
}
非常感谢任何帮助。感谢
编辑:客户端模型
class Client extends AppModel
{
var $name = 'Client';
var $useTable = 'clients';
}
编辑2:查看
<h1><?php echo $client['Client']['lastname']; ?> <?php echo $client['Client']['firstname']; ?> (<?php echo $this->Html->link('Edit', array('action' => 'edit', $client['Client']['id'])); ?>)</h1>
<p><strong>Date of Birth:</strong> <?php echo $client['Client']['dateofbirth']; ?></p>
<h3>Appointments</h3>
<table>
<?php foreach ($appointments as $appointment): ?>
<tr>
<td>
<?php echo $this->Html->link($appointment['Appointment']['date'],
array('admin' => true, 'controller' => 'appointment', 'action' => 'view', $appointment['Appointment']['id'])); ?>
</td>
</tr>
<?php endforeach; ?>
</table>
答案 0 :(得分:0)
确保在模型中两个模型都设置了关联变量。即在客户端模型中,有一个hasMany关联集与外键client_id,在约会模型中有belongsTo与外键client_id。如果这没关系,请检查控制器中是否正在调用find,并将递归设置为大于-1。
$this->Client->find('all', 'recursive' => 1);
现在,在您的客户模型中,您应该有一个$ hasMany字段,如下面的
var $hasMany = array(
'Appointment' => array(
'className' => 'Appointment',
'foreignKey' => 'client_id',
'dependent' => false,
'conditions' => ''
)
在控制器的操作中,您需要提取所有相关数据,例如在admin_view操作中使用
$this->set('client', $this->Client->find('first', 'recursive' => 1));
答案 1 :(得分:0)
您需要在hasMany
- &gt; Client
模型之间设置Appointment
关联(请参阅docs,与User
完全相同 - &gt; {{1}关联是)和Comment
- &gt; belongsTo
之间的反向Appointment
关联(参见相同的文档)。
如果您的数据库表和密钥是根据Cake conventions命名的,并且您使用的是PHP 5,那么这就是您所需要的:
Client
默认情况下,递归设置为1(如您所需),所以如果您没有在任何地方更改它 - 您的代码应该可以正常工作。
答案 2 :(得分:0)
您应该将外键命名为“client_id”。这样当你烘焙它时,Cake可以自动建立连接。 此外,对于您当前的目的,recursive = 1也没关系。但我建议考虑包含在内。这是一个非常有用的工具。