【问题标题】:CakePHP retrieve data from another ModelCakePHP 从另一个模型中检索数据
【发布时间】:2014-03-22 04:23:39
【问题描述】:

我是 cakephp 新手,在从另一个模型中检索数据时遇到了一点问题。

我的表关联是这样的:

Items hasMany Stocks

Stocks belongsTo Items

Items belongsTo UnitMeasurement

UnitMeasurement hasMany Items

我的问题是我想在 Stocks index html 表格视图中显示 UnitMeasurement 名称。

当前 Html 表格视图:

----------------------------------------------------------------------
Item           | Stock Balance|          Unit          |     Created |
----------------------------------------------------------------------
Microprocessor |    12        | DISPLAY UNIT NAME HERE!| 19/1/2014   |
Microcontroller|    20        | DISPLAY UNIT NAME HERE!| 19/1/2014   |             
CPU            |    12        | DISPLAY UNIT NAME HERE!| 19/1/2014   |             
----------------------------------------------------------------------

如何进行成功的查询?

谢谢。

编辑:

这是我在 StocksController 索引函数中的查找查询:

public function index() {
        $this->Stock->recursive = 0;
        $order = "Stock.id DESC";
        //set orderby
        $stock = $this->Stock->find('all',array('order'=>$order));
        $this->set('stocks', $stock);

        //query to find UnitMeasurement Name for Stocks Item
        foreach ($stock as $stocks) {
            //debug($stocks);
            $this->loadModel('Items');
            $unitMeasurement = $this->Items->find('first',array('fields'=>'unit_measurement_id','conditions'=>array('Items.id'=>$stocks['Stock']['item_id'])));
            $this->set('units',$unitMeasurement);
        }

    }

再次感谢。

【问题讨论】:

  • 您可以粘贴您的查找查询吗?在哪个模型上应用 find ?
  • @sismaster 我已经编辑了我的问题。

标签: php cakephp model


【解决方案1】:

请检查此型号名称始终为单数,请检查并告诉我它是否有效!

foreach ($stock as $stocks) {
            //debug($stocks);
            //$this->loadModel('Items');
            $this->loadModel('Item');
            $unitMeasurement = $this->Item->find('first',array('fields'=>'unit_measurement_id','conditions'=>array('Item.id'=>$stocks['Stock']['item_id'])));
            $this->set('units',$unitMeasurement);
        }

【讨论】:

  • 它成功了。但它返回了 UnitMeasurement 的 ID 而不是名称。如何查看名称,如果库存没有 UnitMeasurement,则不应返回单位名称?
  • 或者我应该制作另一个包含 unit_id 和 stock_id 列的表?
【解决方案2】:

你可以这样查询:

$items = $this->Item->find('all', array(
    'fields' => array(
        'Item.name',
        'SUM(Stock.amount) as amount',
        'UnitMeasurement.name',
        'Item.created',
    ),
    'joins' => array(
        array(
            'table' => "stocks",
            'alias' => "Stock",
            'conditions' => "Item.id = Stock.item_id"
        ),
        array(
            'table' => 'unit_measurements',
            'alias' => 'UnitMeasurement',
            'conditions' => 'UnitMeasurement.id = Item.unit_measurement_id',
        ),      
    ),
    'group' => array('Item.id', 'Item.unit_measurement_id'),
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多