【问题标题】:Sorting Datamapper ORM results through an array通过数组对 Datamapper ORM 结果进行排序
【发布时间】:2014-02-14 05:11:35
【问题描述】:

我对 datamapper orm 和 codeigniter 有疑问。

我有一个人名数组:

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

现在我想得到所有有这个名字的人:

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

我的问题是如何对我的数组这样的人员对象进行排序? 如果我回显人员,则排序与我的数组不同。

我知道有一种方法可以按列排序,例如 $persons->order_by('id DESC');

TY.

【问题讨论】:

  • 你想按照你的数组排序吗?或按 asc 或 desc 之类的任何顺序?
  • 我想按照我的数组排序。 :) 不订购
  • 那你就得自己写代码了。我想是的。

标签: php codeigniter datamapper codeigniter-datamapper


【解决方案1】:

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

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

如果您在 postgres 或其他 dbms 上,您也可以将 case 与一堆 when 一起使用,请参阅一些想法 here

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多