0

私の現在のアプリでは、演劇のリストがあり、クエリの演劇の名前でほぼ普遍的に並べ替えられています。現在、DB::select()ステートメントを使用して単純に構築されていますが、多くのリファクタリングを行っている間に、Kohana の ORM ライブラリの使用を開始したいと考えています。問題は、通常、実際の劇名でソートするのではなく、処理されたバージョンでソートし、記事などを取り除いてそれでソートするという事実から生じます (そのため、モルモン書は、 Ts)。それを ORM モデル定義に引き継ぐ方法がわかりません。

選択コードは次のようになります (要約):

DB::select(column, column,
        DB::expr("CASE WHEN SUBSTRING_INDEX(show_name, ' ', 1) IN ('a', 'an', 'the')
              THEN SUBSTRING(show_name, INSTR(show_name, ' ') + 1)
              ELSE show_name
              END AS show_name_sort")

Kohanaが保存時に無視するが、order_by呼び出しで引き続き使用できる偽のshow_name_sort列を作成する方法はありますか? または、並べ替えられたバージョンの名前を含む実際の列を作成する必要がありますか?

4

1 に答える 1

0

可能です。$_table_columns「偽の」列を除くすべての列を反映するように配列を設定する必要があります。テーブルに3つの列があるとします。

  1. id
  2. 名前
  3. 説明

モデルでは、をオーバーライドする必要があります$_table_columns。これにより、ORMはSHOWFULLCOLUMNSクエリに依存しなくなります。

class Model_Yourmodel extends ORM
{
    protected $_table_columns = array(
            'id' => '',
            'name' => '',
        );

クエリの例は次のようになります。
ORM::factory('yourmodel')->order_by('description')->find_all()

この方法でも、saveメソッドは列が配列descriptionにリストされていないため、列を無視します$_table_columns

于 2012-04-19T07:12:41.983 に答える