首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >agiletoolkit atk4中的左连接和非id连接

agiletoolkit atk4中的左连接和非id连接
EN

Stack Overflow用户
提问于 2021-10-14 15:10:37
回答 1查看 54关注 0票数 0
代码语言:javascript
复制
SELECT t1.field1, t1.field2, t1.field3, t2.field4, t2.field5,t2.field6 
FROM table1 AS t1 LEFT JOIN table2 AS t2 
ON t1.field1 = t2.field1 AND t1.field2 = t2.field2
WHERE t1.fieldstart <='2021-10-13' AND t1.fieldend >= '2021-10-31' OR t2.submitted_by='xyz';

我想把上面的查询转换成敏捷工具包的akt4代码,有没有关于如何在敏捷工具包中做左连接的想法,每次我使用join它都会给我内部连接,我想要左连接

代码语言:javascript
复制
$j_table = $m->join('table2.nameid');           

我试过了,看起来很好。

代码语言:javascript
复制
$j_table = $m->leftjoin('table2.nameid');     

但是,当我尝试使用none id连接时,会出现以下错误

代码语言:javascript
复制
$j_table = $m->leftjoin('table2.name','name');     

致命错误atk4\data\Exception:您正在尝试链接非id字段上的表。这还没有实现

想找人帮忙吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-10-19 20:53:36

在Agile Toolkit v1.7.1 (遗留/v1分支)上,只有在底层DSQL级别上才能选择如何做到这一点。

要从模型中获取DSQL实例,请使用:

代码语言:javascript
复制
$model->table_alias = 't1';
$q = $model->dsql();

DSQL示例代码如下:

代码语言:javascript
复制
// You can use expression for more complex joins
$q->join('table2',
    $q->andExpr() // or orExpr()
        ->where('t1.field1=t2.field1')
        ->where('t1.field1=t2.field2'),
    'left',
    't2'
)

这种方法的缺点是,一旦您从数据模型级别“移动”到更低的dsql级别,您就会被锁定在那里,无法使用数据模型的所有优秀功能,因为它不知道在DSQL中定义的连接。至少我是这么记得的。在过去的几年中,工具包发生了很大的变化。

编辑:哦,实际上看起来像是找到了当时单独使用模型的可能性。

试试这个:

代码语言:javascript
复制
$model->join('table2',
  [
    'foreign_alias' => 't2',
    'on' => $expr,
  ],
  'left'
);

其中$expr可以只是一个字符串,如下所示

代码语言:javascript
复制
$expr = 't1.field1=t2.field1 AND t1.field2=t2.field2';

但肯定更好的方法是使用DSQL表达式对象,如

代码语言:javascript
复制
// which is functionally the same as above string approach
$expr = $model->expr('t1.field1=t2.field1 AND t1.field2=t2.field2');

// this is much better because takes care of escaping and table alias automatically
$expr = $model->expr('{}={} AND {}={}', [
    $model->getField('field1'),
    't2.field1',
    $model->getField('field2'),
    't2.field2',
]);

附言:上面的所有代码都是未经测试的。如果你发现任何错误,请在评论中告诉我,我会修复的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69573140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档