好的,我在CakePHP中有一个提交到数据库的表单。在这种形式中,它提交一个名为client_id
的字段,并将其存储在数据库中。
然后我有一个观点允许我查看所有已创建的发票。要查看负责发票的客户,我目前只能通过在视图中放置<?php echo $invoice['Invoice']['client_id']; ?>
来查看表单中输入的ID。
发票转到一个名为:发票
的数据库客户名称未存储在发票表中,只是存储在
中客户端信息存储在一个名为:clients
的数据库中我希望能够在发票视图中实际显示客户实名,而不是客户ID。
我尝试将以下查询添加到我的索引控制器中,但我不确定在此之后该怎么做或者这是否正确。
$this->set('clients', $this->Invoice->query("SELECT * FROM clients WHERE id='89545'"));
为了首先解决这个问题,请通过评论请求具体代码。即控制器代码,视图代码等...提前感谢您。
其他想法
如果我没有使用CakePHP,我可以使用类似下面的内容,所以我想我只是不知道如何把它变成cakephp“language”。
<?php
query($con, "SELECT name FROM clients WHERE id='$client_id'");
echo $row['name'];
?>
大致!
更新
以下是我的模特
第一个是Client.php
<?php
class Client extends AppModel {
public $hasMany = array(
'Invoice' => array(
'className' => 'Invoice',
'foreignKey' => 'client_id'
)
);
}
?>
第二个是Invoice.php
<?php
class Invoice extends AppModel {
public $belongsTo = array(
'Client' => array(
'className' => 'Client',
'foreignKey' => 'client_id'
)
);
}
?>
最后,要从数据库中获取发票,我在内部使用以下内容:InvoicesController.php
public function index() {
$this->set('invoices', $this->Invoice->find('all'));
}
答案 0 :(得分:1)
您是否正确设置了model associations?如果是这样,假设您没有使用$invoice['Client']['client_name']
,那么您应该可以执行recursive = -1
之类的操作。
/编辑:好的,我不介意抛出一些代码,但这是一个基本的概念,你必须尝试包围你的头。连接到另一个模型的每个模型都必须设置关联,否则事情会很痛苦。
我假设Client hasMany Invoice
。因此,每张发票都是特定于客户的,并且他们可以有多张发票(例如2013年10月与2013年11月发票)。从CakePHP页面我们看到:
class User extends AppModel {
public $hasMany = array(
'Comment' => array(
'className' => 'Comment',
'foreignKey' => 'user_id',
'conditions' => array('Comment.status' => '1'),
'order' => 'Comment.created DESC',
'limit' => '5',
'dependent' => true
)
);
}
因此,使用它作为我们的模板,我们最终得到:
public $hasMany = array(
'Invoice' => array(
'className' => 'Invoice',
'foreignKey' => 'client_id'
)
);
那就是Client.php
。由于hasMany
的倒数为belongsTo
,我们有一个Invoice belongsTo Client
。再次,使用CakePHP页面作为模板,我们最终得到:
public $belongsTo = array(
'Client' => array(
'className' => 'Client',
'foreignKey' => 'client_id'
)
);
那就是Invoice.php
。设置完这些关联后,无论何时执行$this->Invoice->find('all');
或$this->paginate('Invoice');
,使用正确的$recursive
设置,Cake都会抓取相应的Client
记录。这使您可以执行我之前说过的操作,例如$invoice['Client']['client_name']
。
答案 1 :(得分:0)
你也可以使用$ actsAs = array('Containable');在模型中,为了在控制器的find方法中使用'contains'指令(而不是使用递归,这很可能会在具有许多关系的模型上获得不需要的数据)