Cakephp:可以使用Model-> find('all')返回没有模型名称的结果

时间:2009-09-11 02:07:30

标签: php cakephp

使用Model-> find('all')返回一个具有以下结构的数组:

array(
  0 => array('Model1' => array(/* Model1 fields*/), 'Model2' => array(/* Model2 fields*/), ...),
  1 => array('Model1' => array(/* Model1 fields*/), 'Model2' => array(/* Model2 fields*/), ...),
  ...)

当查询单个模型时(即Recursive = -1),是否可以将结果作为具有以下结构的数组返回:

array(0 => /* Model1 fields*/, 1 => /* Model1 fields*/, etc...)

我以为我曾经在某个地方看过这个但是无法弄清楚如何做到这一点或者是否有可能。

3 个答案:

答案 0 :(得分:2)

这个怎么样?适用于php 5.4 +

// Split string by underscores
$pieces = explode('_', $filename);

// Get the number of pieces
$n = count($pieces);

// Keep just the file extension in the last piece
$pieces[$n] = substr($pieces[$n], strpos($pieces[$n], '.'));

// Remove the other unwanted pieces
unset($pieces[$n - 1];
unset($pieces[$n - 2];

// Reassemble with spaces instead of underscores
$new_string = implode(' ', $pieces);

对于较旧的php版本,您需要在获取结果后进行迭代

答案 1 :(得分:1)

也许您正在考虑可能以这种方式返回的相关模型? AFAIK Cake查询结果非常标准化,这是一件好事。

array(
    0 => array(
        'Model' => array(
            'id',
            'field1',
            ...
         ),
        'belongsTo/hasOneModel' => array(
            'id',
            'field1',
            ...
         )
        'habtm/hasManyModel' => array(
            0 => array(
                'id',
                'field1',
                ...
            ),
            1 => array(
                ...
            )
        )
    ),
    1 => array(
        'Model' => array(
            ...
        ),
        ...
    )
)

如您所见,相关的HABTM或hasMany模型以“flat”数组返回,但主模型应始终包含模型名称。

答案 2 :(得分:1)

您还可以修改该模型的aftersave方法,以便在执行查询后返回$ data ['Modelname'] ...本质上,它基本上是一个数组移位,你只需要$ arrayname [' fieldname']而不是$ arrayname ['Model'] ['fieldname']。这就是你问的问题吗?