CakePHP在数组中查找字段

时间:2017-02-02 18:46:45

标签: php arrays cakephp field

我目前正在使用CakePHP find('all')函数从数据库中检索许多字段。我知道如何使用'fields'=> array('Model.Field')来限制返回的字段数。但是,该函数当前返回的数据如下所示:

array (size=1)
  0 => 
      'Model' => 
        array (size=1)
          0 => 
            array (size=8)
              'Field1' => string 'value'
              'Field2' => string 'value'
              'Field3' => string 'value'
              'Field4' => string 'value'
              'Field5' => string 'value'
              'Field6' => string 'value'
              'Field7' => string 'value'
              'Field8' => string 'value'

我想只返回其中一些字段。我找不到完成此操作的语法。我尝试了以下选项:

'Model.Field1' (returns false)
'Model.0.Field1' (returns false)
'Model.[0].Field1' (returns false)
'Model' => 0 => 'Field1' (invalid syntax)
'Model' => '0.Field1' (returns false)

有没有办法用find函数执行此操作,或者我最好只编写自己的SQL查询?

编辑:这是请求的查找功能 -

$this->Model1->find('all', array(
                'conditions' => $conditions,
                'restrict' => array('Model1', 'Model2', 'Model3', 'Model4'),
                'fields' => array('Model1.Field1', 'Model1.Field2', 'Model1.Field3', 'Model1.Field4', 'Model1.Field5', 'Model1.Field6', 'Model1.Field7',
                    'Model2.Field1', 'Model2.Field2', 'Model2.Field3', 'Model2.contract_id', 'Model2.Field4')
            ));

这当前适用于限制Model1和Model2的结果,因为它们不返回子数组中的值。如上所述,尝试对Model3和Model4使用相同的语法不起作用。这是我尝试使用“包含”选项做的事情:

$this->Model1->find('all', array(
                'conditions' => $conditions,
                'restrict' => array('Model1', 'Model2', 'Model3', 'Model4'),
                'fields' => array('Model1.Field1', 'Model1.Field2', 'Model1.Field3', 'Model1.Field4', 'Model1.Field5', 'Model1.Field6', 'Model1.Field7',
                    'Model2.Field1', 'Model2.Field2', 'Model2.Field3', 'Model2.contract_id', 'Model2.Field4'),
                'contain' => array(
                    'Model3' => array(
                        'fields' => array(
                            'Field1',
                            'Field2',
                            'Field3',
                            'Field4',
                            'Field5',
                        )
                    )
                )
            ));

1 个答案:

答案 0 :(得分:0)

您应该可以指定find('all')中返回的字段,正如您在问题中提到的那样。

$this->find('all', array(
    'fields' => array(
        'Model.Field1',
        'Model.Field2',
        // etc
    )
));

如果Model是相关模型,则可以使用ContainableBehavior指定字段。

$this->find('all', array(
    'contain' => array(
        'Model' => array(
            'fields' => array(
                'Field1',
                'Field2', // etc
            )
        )
    )
));

containable docs