后台php设置连表之后,用类似于所属分类查询,会有id不明确的情况
language
/**
* @var object
* @phpstan-var UserMoneyLog
*/
protected object $model;
protected array $withJoinTable = ['user'];
// 排除字段
protected string|array $preExcludeFields = ['create_time'];
protected string|array $quickSearchField = ['user.username', 'user.nickname'];
public function initialize(): void
{
parent::initialize();
$this->model = new UserMoneyLog();
}
譬如说以上的余额日志,假如要用去查询,会报错Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
/admin/user.MoneyLog/index?isTree=true&uuid=_38878286911721647671442&page=1&initKey=id&initValue=5&select=true&quickSearch=
打印sql看了一下,是where的id没有指定是哪张表的,有解决方案不?
使用方式类似于这样
请先登录
将远程下拉组件的
pk: 'id'
改为pk: '模型名称.id'
,其中模型名称指模型类的名称,不含目录路径不太行,这样子查询,数据列表全部为空了
看了一下sql语句,这样子就只查询 商户分类等于13的商户了,而不是商户列表,这个方案不行
SELECT
shop.*,
category.
idAS
category__id,
category.
pidAS
category__pid,
category.
nameAS
category__name,
category.
imageAS
category__image,
category.
remarkAS
category__remark,
category.
statusAS
category__status,
category.
background_imageAS
category__background_image,
category.
weighAS
category__weigh,
category.
create_timeAS
category__create_time,
category.
update_timeAS
category__update_time,
category.
delete_timeAS
category__delete_timeFROM
jy_mall_shopLEFT JOIN
jy_categoryON
shop.
category_id=
category.
idWHERE (
category.
id= '13' ) AND
shop.
delete_time= '0' ORDER BY
weighDESC
这里指定的是 pk 对应的字段,避免模棱两可的字段名,和 13、列表什么的无关
有个疑问?为啥不在queryBuilder()方法中增加一个判断,如果是连表,那么查询的时候就自动在pk上加上表别名呢?
那么你的
pk
是使用了那个表的id
字段呢?可以默认是主表的,我看是有主表别名的
多表关联呢,有时候不是只有一个关联表
- 1
前往