我对某些生成的查询有疑问,该查询与具有相同字段的表进行内部联接。
如何在每个字段中使用表名进行查询,基本上我想要的是:
转换这个:
select "list_id", "date_time","plate"...
至:
select register."list_id", register."date_time",register."plate"...
我认为字段名称的别名也可以完成,但我不知道如何在 atk4 中添加别名
如果有人想查看完整的查询和 atk 错误:
应用程序错误:数据库查询失败
异常数据库,代码: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 个相关字段,有了这些,一切正常。但是我想再多一个字段(表列表中的字段名称),并且列表与寄存器没有直接关系,仅通过详细信息相关。所以我必须通过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');
我怎样才能从列表字段中获得这个字段?任何解决方案都将受到欢迎..
谢谢指教!!我用这个打破了我的头!;)