【问题标题】:Yii2, ActiveQuery, Postgresql: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parametersYii2、ActiveQuery、Postgresql:SQLSTATE[HY093]:无效参数号:混合命名参数和位置参数
【发布时间】:2018-07-21 18:56:48
【问题描述】:

我有一个问题

$query = User::find();
$query->joinWith(['profile']);
$query->andWhere(['not', ['user.id' => $this->searching_user_id]]);
$query->andWhere(new Expression('profile.photo::jsonb ? \'id\''));

并得到错误

SQLSTATE[HY093]: 无效参数号:混合命名参数和位置参数\n 未能准备 SQL:SELECT COUNT(*) FROM \"user\" LEFT JOIN \"profile\" ON \"user\".\"id\" = \"profile\".\"user_id\" WHERE (\ "user\".\"status\"=:qp0) AND (NOT (\"user\".\"id\"=:qp1)) AND (profile.photo::jsonb ? 'id')

所以,如果我运行 SQL

SELECT "user".* FROM "user" LEFT JOIN "profile" ON "user"."id" = "profile"."user_id" 
WHERE ("user"."status"='active') 
  AND (NOT ("user"."id"=1)) 
  AND (profile.photo::jsonb ? 'id')

我做错了什么?

【问题讨论】:

  • 您提供的sql 查询,如果通过mysql 控制台或phpmyadmin 运行,它是否获取正确的记录。
  • @MuhammadOmerAslam 如果你问 - 是的

标签: php postgresql pdo yii2


【解决方案1】:

我无法对此进行测试,因为我没有运行 postgre sql,但看起来最后一条语句不太正确。我认为表名和字段需要放在括号中。你可以看出这一点,因为Yii2 没有正确引用字段名称。此外,您还混合了两组单引号括号,尽管您已经正确地转义了单引号,但 php 通常不喜欢这些括号。尝试像这样嵌套它们;

$query->andWhere(new Expression("(profile).photo::jsonb ? \'id\'"));

正如我所说,我无法对此进行测试,但希望它对您有所帮助

【讨论】:

  • yii2 使用{{%table}}.[[column_name]] 我认为和profile 是一个关系
  • @MuhammadOmerAslam 是的,但是 Expression 的评估与您编写的完全一样,没有展开任何关系。
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多