Cakephp:将数据从模型中获取到另一个模型的视图中

Cakephp:将数据从模型中获取到另一个模型的视图中,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,在Cakephp v2.3应用程序中,有两种模型: 采购模型:主要包括以下字段:id、发票日期、按供应商税率计算的总金额 class Purchase extends AppModel { public $displayField = 'id'; public $belongsTo = 'Supplier'; } 供应商模型:包含id、名称和税率 class Supplier extends AppModel { public $displayField = 'nam

在Cakephp v2.3应用程序中,有两种模型:

采购模型:主要包括以下字段:id、发票日期、按供应商税率计算的总金额

class Purchase extends AppModel {

    public $displayField = 'id';
    public $belongsTo = 'Supplier';
}
供应商模型:包含id、名称和税率

class Supplier extends AppModel {
    public $displayField = 'name';
    public $hasMany = 'Purchase';
}
以下是我的PurchasesController添加视图的外观:

现在,我想在app/View/Purchase/add.ctp中显示当前所选供应商的Supplier.tax_rate作为标签或文本输入


知道怎么做吗?

使用Jquery查找选择框更改时的税率。有关更多详细信息,请查阅JsHelper

下面是我的1.3版应用程序中的一些视图代码示例,可能会对您有所帮助。当然,您必须要加载helper、jquery、控制器代码和其他视图

//helper in view
//observe selectbox for selection, if change, update question.
$js->get('#EntitiesUserPrimarycontactId')->event('change', $js->request(array('controller'=>'users','action'=>'update_previewcontact'),array('update'=>'#step4_results','dataExpression'=>true,
'before' => "$('#step4_results').fadeOut('fast');",
'complete' => "$('#step4_results').fadeIn('slow');,
'data'=>$js->serializeForm(array('isForm' => true, 'inline' => true)) )));
我想出来了。 我最后做的是将所有供应商税率数据作为JSON,输出到视图中&然后使用客户端javascript选择相关代码

PurchasesController调用自定义模型方法,该方法触发SQL查询以获取所有供应商税率数据

$supplier_tax_rate = $this->Purchase->Supplier->getTaxRate();
$this->set('supplier_tax_rate', json_encode($supplier_tax_rate));
客户端中的。我使用Javascript实现了我想要的功能,这里supplier_tax_rates是存储JSON税率数据的变量&getTaxRate是一个变量函数,它根据supplier down的id从JSON返回税率

$(function() {
    var taxRates = $.parseJSON(supplier_tax_rates);

    var getTaxRate = function(id) {
        for (var i in taxRates) {
            if (taxRates[i].id == id) {
                return taxRates[i].tax_percentage_charged;
            }
        }
    };
}); 

这对我来说效果很好,希望它能帮助其他人根据下拉列表的值从cake中的数据库中获取一些数据

也许您可以启动一个ajax调用,使用select选项上的onChange事件从供应商检索数据。。你怎么看?是的,但我没有把所有的数据都放在视图中,因为供应商的数据低于5kb,因此,将所有数据一次性作为JSON输出到视图中是有意义的,这将有助于避免延迟。每次ajax调用都会增加延迟:我尝试了这一点,但我无法让它对我起作用,但我最终手工编写JS,而不是让cake为我生成它。