1

生成された特定のクエリに問題があります。クエリは、同じフィールドを持つテーブルとの内部結合を行います。

各フィールドにテーブル名を含むクエリを作成するにはどうすればよいですか。基本的に私が欲しいのは次のとおりです。

これを変換します:

 select "list_id", "date_time","plate"...

に:

 select register."list_id", register."date_time",register."plate"...

フィールド名へのエイリアスでも達成できると思いますが、atk4にエイリアスを追加する方法がわかりません

誰かが完全なクエリと atk エラーを見たい場合:

アプリケーション エラー: データベース クエリに失敗しました

Exception_DB、コード: 0

追加情報:

pdo_error: SQLSTATE[42702]: Ambiguous column: 7 ERROR: column reference "date_time" is ambiguous LINE 1: select "date_time","plate",(select "name" from "lane" whe... ^
mode: select
params:
query: select "date_time","plate",(select "name" from "lane" where "register"."lane_id" = "lane"."id" ) "lane",(select "name" from "camera" where "register"."camera_id" = "camera"."id" ) "camera",(select "detail"."id" from "detail" where "register"."detail_id" = "detail"."id" ) "detail","id","lane_id","camera_id","detail_id" from "register" inner join "detail" on "detail"."id" = "register"."detail_id" order by (select "detail"."id" from "detail" where "register"."detail_id" = "detail"."id" )

これが私がモデルを作る方法です。このモデルには、他のテーブルに 3 つの関連するフィールドがあり、それらはすべて問題ありません。しかし、もう 1 つのフィールド (テーブル List のフィールド名) が必要であり、List は Register に直接関連しておらず、Detail のみに関連しています。だから私はRegister - > Detail - > List..

table Register(id, plate, detail_id,..)---->hasOne(detail_id)-->table Detail(id, list_id, date..)---->hasOne(list_id)---->tableリスト (ID、名前、..)

モデルクラス:

    class Model_Register extends Model_Table {
          public $table='register';
        function init(){
            parent::init();

            $this->addField('date_time')->sortable(true)->defaultValue(date('Y-m-d H:m:i'))->type('date')->mandatory(true);
            $this->addField('plate')->sortable(true)->mandatory(true);

            $this->hasOne('Lane', 'lane_id')->sortable(true)->system(true);
            $this->hasOne('Camera', 'camera_id')->sortable(true);
            $this->hasOne('Detail', 'detail_id')->sortable(true);
        }

    }

そして、ページクラスで参加した後、はい、現時点で詳細が冗長であることはわかっています...

    $register = $crud->setModel('Register');
    $q = $register->_dsql();
    $q->join('detail', 'detail_id', 'inner');
    $q->join('list', 'list_id', 'inner');

リストフィールドからこのフィールドを取得するにはどうすればよいですか?? どんな解決策も歓迎されます..

アドバイスありがとう!! 私はこれで私の頭を壊しています!;)

4

2 に答える 2

1

モデルに「table_alias」プロパティを追加してみてください

class Model_Yours extends Model_Table {
    public $table_alias = '_alias';
}

このプロパティのデフォルト値は null です -リンク

したがって、値を追加すると、ここで使用できます

これが役立つかどうかはわかりません:(


$t1 = $this->add('Main_Table');
$t2 = $t1->leftJoin('joined_table_name');
$t2->addField('joined_table_field_ALIAS','joined_table_field_REALNAME');

ここで SQL_Model::addField() メソッドを確認してください

于 2013-12-27T15:33:28.303 に答える
1

お時間いただきありがとうございます。最終的に、次の呼び出しで解決策を見つけました。連鎖結合

ドキュメントの例:

$perm = $this->join('permission');
$res = $perm->join('resource');

信じられないかもしれませんが、それが私の本当の問題でした! とにかくありがとう

于 2013-12-30T18:15:11.017 に答える