1

您将如何(优雅地)使用 Zend Framework 2 中的闭包按字段排序 select 语句?

我有以下 PHP 代码:

$gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $adapter);
$select = $gateway->select(function($select){
    $select->where->in('id', array(4, 2, 3, 1));
    // insert some awesome ordering magic here..!
});

我知道你可以很容易地做到这一点:

    ...
    $select->order(array('id ASC'));
    ...

但这只会按升序对结果进行id排序,我需要按特定的 id 序列对它们进行排序(即:让它们按序列排序4, 2, 3, 1

我可以在这里使用优雅的 Zend Framework 2 函数来自己订购id吗?有效地创建 SQL:

select * from table_name 
    where 'id' in (4, 2, 3, 1)
    order by field('id', (4, 2, 3, 1));
4

2 回答 2

6

这是我发现在 Zend 2 中按字段排序结果的最佳方式。如果您有任何建议/更好的方法,请贡献您自己的解决方案!

我最终和Expression全班同学一起给出了想要的结果。举一个详细的例子,看看下面的 PHP 代码:

use Zend\Db\Sql\Expression;

// create the array of ID's we want to order by...
$ids = array(4, 2, 3, 1);

// get our table gateway and our select going...
// don't forget the 'use' syntax here...
$gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $db_adapter);
$select = $gateway->select(function($select) use($ids){

    // standard 'in' functionality...
    $select->where->in('id', $ids);

    // use an expression here to achieve what we're looking for...
    $ids_string = implode(',', $ids); // assuming integers here...
    $select->order(array(new Expression('FIELD (id, '. $ids_string .')')));

});

希望这对某人有所帮助!

于 2013-10-04T13:44:50.130 回答
0

当您将“优雅”一词应用于函数时,我不确定我是否知道您的意思,但如果是这样的话:

$select->orderInExactlyThatOrder (array (4,2,3,1));

那么不,我不这么认为。

于 2013-10-04T11:00:30.807 回答