在敏捷工具包中为查询中的每个选择字段添加表名

时间:2013-12-27 14:27:58

标签: atk4 agiletoolkit

我对某些生成的查询有问题,查询使用具有相同字段的表进行内部联接。

如何在每个字段中使用表名进行查询,基本上我想要的是:

转换它:

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

TO:

 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个相关字段,有了这些,一切都OK。但是我想再增加一个字段(表名列表中的字段名称),而List与Register没有直接关系,只与详细信息有关。所以我必须通过Register-> Detail-> List ..

表注册(id,plate,detail_id,..)----> hasOne(detail_id) - >表详情(id,list_id,date ..)----> hasOne (list_id)---->表格列表(id,name,..)

模特课:

    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');

如何从List字段中获取此字段?任何解决方案都将受到欢迎..

谢谢你的建议!!我这打破了我的头! ;)

2 个答案:

答案 0 :(得分:1)

尝试为模型添加“table_alias”属性

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

此属性的默认值为null - link

因此,如果您添加任何值,可以使用here

不确定这是否有帮助:(


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

check SQL_Model::addField() method here

答案 1 :(得分:1)

感谢您的时间,最后我找到了带有被叫链接的解决方案:链式连接

文档示例:

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

是否相信这是我真正的问题!无论如何,谢谢大家