我目前正在使用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',
)
)
)
));
答案 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
)
)
)
));