2017-06-27 11:08:41 3598次浏览 4条回答 0 悬赏 10 金钱
$sql = Data00204::find()
->alias('d204')->leftJoin(['d2061'=>'{{%data00206}}'],['and',['{{d2061}}.[[id]]'=>'{{d204}}.[[optiontypeid]]','{{d2061}}.[[type]]'=>1,'{{d2061}}.[[status]]'=>1]])
->createCommand()
->getRawSql();
print_r($sql);

如果上面这一段代码解析后如下;

SELECT `d204`.* FROM `erp_data00204` `d204` LEFT JOIN `erp_data00206` `d2061` ON ((`d2061`.`id`='{{d204}}.[[optiontypeid]]') AND (`d2061`.`type`=1) AND (`d2061`.`status`=1))

{{d2061}}.[[optiontypeid]]值他给原样输出了,这样本来要来自另一个表的, 没有给我转换,

这个LEFT JOIN的参数应该怎么写的

补充于 2017-06-27 11:41

QQ截图20170627113929.png

QQ截图20170627113940.png

文字 网站把中括号给避了,看图片吧,这SQL语句解析怎么会是这样呢?

  • 回答于 2017-06-27 11:19 举报

    能不能把你的两个数据表数据复制几行出来,你就丢个sql谁知道怎么回事,对吧

    5 条回复
    回复于 2017-06-27 11:26 回复

    现在不是数据的问题,是SQL语句都生成错了

    回复于 2017-06-27 13:30 回复

    and里面把表名拼上

    回复于 2017-06-28 17:34 回复

    写原生的 或者是拼接是肯定可以,只是解得YIi还是不够完善吧,有的地方它还是没有解析出来

    回复于 2017-06-29 09:23 回复

    @xjcallen
    $query = 类名::find()->where([ '表名.字段'=> 值])->andWhere(['<','表名.字段', 变量])->orderBy('表名.字段 desc');
    $query->joinWith(['关联查询方法名', '关联查询方法名']);

    回复于 2017-07-28 13:07 回复

    确实有时候不稳定

  • 回答于 2017-06-27 11:29 举报

    what the ..........

  • 回答于 2017-06-28 17:07 举报

    你确定你语法对了吗
    SELECT d204.* FROM erp_data00204 d204 LEFT JOIN erp_data00206 d2061 ON ((d2061.id='{{d204}}.optiontypeid') AND (d2061.type=1) AND (d2061.status=1))
    在第一个AND前面不应该改成where吗 哪里有LEFT JOIN ... on ... and ... 这样的

    1 条回复
    回复于 2017-06-28 17:33 回复

    那就奇怪了,你还不知道Join on 后面可以跟and or 等多个条件吗?一直都是这么写啊

  • 回答于 2017-07-03 10:24 举报

    LEFT JOIN 可以参考这篇文章

    http://yiilib.com/topic/740/Yii 2.0 Left Join 搜索代码示例

    没有那么麻烦吧。

    1 条回复
    回复于 2017-07-03 10:25 回复

    而且建议在数据库设计的时候加字段前缀,可以规避的 alias的问题。

您需要登录后才可以回答。登录 | 立即注册
xjcallen
见习主管

xjcallen 东莞

注册时间:2017-01-10
最后登录:2022-06-30
在线时长:6小时36分
  • 粉丝0
  • 金钱175
  • 威望0
  • 积分235

热门问题