Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用sql server时bug非常多,需要怎么修复? #523

Open
metoogo opened this issue Mar 10, 2024 · 2 comments
Open

使用sql server时bug非常多,需要怎么修复? #523

metoogo opened this issue Mar 10, 2024 · 2 comments
Labels

Comments

@metoogo
Copy link

metoogo commented Mar 10, 2024

比如使用模型关联统计的时候会报错:
SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
我总表的hasMany添加了,明细表的belongsTo也添加了,按着教程的做都报错

@big-dream
Copy link
Contributor

  • 能自行解决的且代码有优化空间的,可提交PR。
  • 自行解决不了的,请补充详细信息(包括但不限于代码和表结构)

@metoogo
Copy link
Author

metoogo commented Mar 12, 2024

先声明,我的环境是:sql server
比如我有2个表:customer,equipment
customer表里面有字段:customer_id(主键),name
equipment表里有字段:equipment_id (主键),equipment_model,customer_id

然后我生成了2个model:CustomerModel、EquipmentModel
在CustomerModel添加了:
function equipments() {
return $this->hasMany(EquipmentModel::class,'customer_id','customer_id');
}

现在我在customer的controller里面使用
$customer_equipments_count= CustomerModel::withCount('equipments')->select();
这个就直接报错了,错误代码:
[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

合成的sql语句为:
SELECT T1.* FROM (SELECT thinkphp., ROW_NUMBER() OVER ( ORDER BY rand()) AS ROW_NUMBER FROM (SELECT ,(SELECT T1. FROM (SELECT thinkphp., ROW_NUMBER() OVER ( ORDER BY rand()) AS ROW_NUMBER FROM (SELECT COUNT(*) AS think_count FROM [d_equipment] [count_table] WHERE ( [count_table].[customer_id] =d_customer.customer_id ) ) AS thinkphp) AS T1) AS [equipments_count] FROM [d_customer] WHERE [customer_id] IN (1,2,3) ) AS thinkphp) AS T1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants