【发布时间】:2021-07-29 05:29:45
【问题描述】:
我试图在我的项目中使用与 '::with' 的关系,但我收到了一个奇怪的错误。
实体是:
- 二进制 -> PK: BinaryUid
- 模板 -> PK:TemplateUid
- TemplateBinary -> PK:TemplateBinaryUid / FK:BinaryUid、TemplateUid
是的,我使用的是 UID,而不是增量 ID。
模型中的关系:
- 二进制:
public function templates() {
return $this->belongsToMany(Template::class,'TemplateBinary','BinaryUid','TemplateUid','BinaryUid','TemplateUid');
}
- 模板:
public function binaries() {
return $this->hasManyThrough(Binary::class,TemplateBinary::class,'TemplateUid','BinaryUid','TemplateUid','BinaryUid');
}
- 模板二进制:
class TemplateBinary extends Pivot {
// Whatever
}
二进制实体中的数据:
"BinaryUid": "0607B8E6-A7AE-EB11-80FB-0050562E716F"
模板实体中的数据:
"TemplateUid": "03D499C4-845C-47D9-A1C9-BBD4DA242B8A"
TemplateBinary 实体中的数据:
"BinaryUid": "0607B8E6-A7AE-EB11-80FB-0050562E716F",
"TemplateUid": "03D499C4-845C-47D9-A1C9-BBD4DA242B8A"
在 BinaryController 我正在做:
Binary::with('templates')->get();
这就是我得到的:
Illuminate\Database\QueryException: SQLSTATE[22018]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]操作数类型冲突:uniqueidentifier 与 smallint 不兼容(SQL:选择 [Template]。, [TemplateBinary].[BinaryUid] as [pivot_BinaryUid], [TemplateBinary].[TemplateUid] as [pivot_TemplateUid] from [Template] 内部连接 [TemplateBinary] on [Template].[TemplateUid] = [TemplateBinary].[ TemplateUid] where [TemplateBinary].[BinaryUid] in (607)) 在文件 C:\inetpub\wwwroot\checklist\vendor\laravel\framework\src\Illuminate\Database\Connection.php 第 678 行*
如您所见,“where”条件试图与整数进行比较,但我可以确认这不是任何实体的增量 ID。但是,它没有理由与增量 ID 进行比较。我不知道它来自哪里,以及为什么 Eloquent 设置这个条件。我能做什么?
【问题讨论】:
-
似乎与这个问题非常相似,Laravel 5.3 return Auth:user() by uniqueidentifier。另请注意,在这两种情况下,错误消息中的 smallint/int 都是以 GUID 开头的十进制数字 - 在您的情况下为
0607,在他们的情况下为07164。
标签: php sql-server laravel-8 eloquent-relationship uid