通过数组对Datamapper ORM结果进行排序

时间:2014-01-23 15:02:20

标签: php codeigniter datamapper codeigniter-datamapper

我遇到了datamapper orm和codeigniter的问题。

我有一个人名的数组:

$names = array('john t', 'alex f', 'martin a');

现在我想得到所有拥有此名字的人:

$persons = new Person();
$persons->where_in('name', $names);
$persons->get();

我的问题是如何对像我的数组这样的人物对象进行排序? 如果我回应人,那么排序就不是我的数组了。

我知道有一种方法可以通过order_by列来实现$persons->order_by('id DESC');

TY。

1 个答案:

答案 0 :(得分:0)

如果您使用的是MySQL,则可以在SQL中使用FIELD()方法:

select * from persons where name in ('foo', 'bar', baz') order by field(name, 'bar', 'baz', 'foo');

如果您使用postgres或其他dbms,也可以将casewhen一起使用,请参阅一些提示here

然而,codeigniter中的order_by方法(数据映射器只是将调用转发给它)将尝试转义它的参数,因此最终会出现sql错误。您可以通过直接操作数组来解决这个问题,其中按字符串顺序存储顺序。

// before the ->get();
$person->db->ar_orderby[] = "field(name, 'john t', 'alex f', 'martin a')";

您需要非常小心地在此处转义输入并匹配列名称(在示例name中),因为您不再需要框架的帮助。