php 편집기 Yuzai가 Gorm에서 Preload()에 Raw()를 사용하는 방법을 소개합니다. Gorm은 데이터베이스 작업을 위한 다양한 편리한 방법을 제공하는 강력한 Go 언어 ORM 라이브러리입니다. 어떤 경우에는 쿼리에 기본 SQL 문을 사용해야 할 수도 있고 Preload() 메서드를 사용하여 관련 데이터를 미리 로드해야 할 수도 있습니다. Raw() 메서드를 사용하면 Gorm에서 Preload()를 결합하여 이 요구 사항을 충족할 수 있습니다. 다음으로, 이 기술을 더 잘 이해하고 적용할 수 있도록 구체적인 단계를 자세히 설명하겠습니다.
이전 프로젝트에서는 복잡한 쿼리를 해야 해서 Raw()
를 사용했습니다. 쿼리는 다음과 같습니다.
gorm
의 콘텐츠/메서드를 사용하여 이 작업을 완전히 수행할 수 있는지 확신할 수 없으므로 더 익숙한 간단한 쿼리를 사용합니다. 이제 tbl1.type_id
와 관련된 레코드를 가져오고 싶습니다. gorm
中的内容/方法完全做到这一点,所以我只是使用我更熟悉的简单查询。现在,我想获取与 tbl1.type_id
关联的记录。我尝试在 Raw()
之前添加 Preload()
但这似乎不起作用,因为检查我用来存储查询结果的结构数组的内容似乎没有填充 Type
앞에 Preload()
를 추가하려고 했지만 쿼리 결과를 저장하는 데 사용하는 구조체 배열의 내용을 검사해도 유형이 채워졌습니다.
업데이트:
둘러본 결과 위의 Raw()
查询转换为 gorm
쿼리를 gorm
의 메서드 링크로 변환하는 방법을 찾았습니다. 다음과 같습니다:
이전 Raw()
查询一样,但它仍然缺少一些东西,这就是获取关联表到 table1 的方法(它是方法链接上的actuator_device_infos,有点懒惰仍然清理新代码)。即使我在查询构建方法之前添加 Preload()
,它似乎也不会影响结果记录。我需要使用 Model()
进行方法链接,并且缺少它会产生错误,因为 Model()
中的解析表将用于最终查询的 FROM
部分,因此 gorm
应该有所了解我想要预加载的东西存在。我预加载的是 actuator_types
,它已经有一个 Joins()
,如上面的代码所示。
感谢@Trock的评论,我终于找到了最后一块拼图。看来我只需要在方法链的末尾使用 Find()
,这样 Preload()
就可以工作。最终的代码看起来就像我在问题上的代码,但我用 Find()
替换了 Scan()
。我尝试对 Raw()
代码执行相同的操作,并且效果也很好。 gorm
쿼리와 동일하게 작동하지만 여전히 뭔가가 누락되어 있습니다. 이는 관련 테이블을 table1로 가져오는 방법입니다(메소드 링크의 Actuator_device_infos이며 새 코드를 정리하기에는 여전히 약간 게으릅니다). 쿼리 작성 메소드 앞에 Preload()
를 추가해도 결과 레코드에는 영향을 미치지 않는 것 같습니다. 메서드 체이닝을 위해 Model()
을 사용해야 하는데 이를 누락하면 Model()
의 구문 분석 테이블이 FROM 섹션이므로 <code>gorm
은 내가 미리 로드하려는 항목이 존재한다는 사실을 어느 정도 알아야 합니다. 내가 미리 로드하는 것은 actuator_types
이며, 위 코드에 표시된 대로 이미 Joins()
가 있습니다.
Preload()
가 작동하도록 메서드 체인 끝에 Find()
를 사용하기만 하면 되는 것 같습니다. 최종 코드는 질문에 있던 코드와 똑같아 보이지만 Scan()
을 Find()
로 대체했습니다. 🎜 코드로 동일한 작업을 시도했는데 역시 잘 작동했습니다. gorm
에서는 이 메커니즘을 언급해야 합니다. 🎜위 내용은 Gorm에서 Preload()에 Raw()를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!