我不知道我是否应该画出相似之处,但不幸的是,这是我表达问题的唯一方法。 在SQL中,假设我们有两个表:
部门ID。在Employee表中是一个外键,在Department表中。
现在假设我要获取以下列: 员工ID,员工姓名,部门名称
使用SQL,例如:
SELECT A.EMPLOYEE_ID, A.EMPLOYEE_NAME, B.DEPT_NAME
FROM EMPLOYEE A, DEPARTMENT B
WHERE A.DEPT_ID = B.DEPT_ID
如何使用Swift中的Core Data执行此操作?我想我只是看到引用而感到困惑
NSFetchRequest(entityName: entityName)
其中entityName引用单个实体(关系数据库术语中的表)
我真的很感激任何可以帮助我理清疑虑的指针或例子。
谢谢
答案 0 :(得分:0)
当然可以创建一个与SQL查询等效的获取请求。如果不是不可能通过单个获取请求实现,则更复杂的查询可能是困难的。但我建议尽量不要在CoreData和SQL之间绘制相似之处,至少在你必须掌握其工作方式之前。
举个例子,在世界的CoreData视图中,Employee
将是与另一个实体Department
有关系的实体。基于Employee
实体的获取请求将返回Employee
个对象的数组,并且(假设您为每个实体创建NSManagedObject的子类),您可以使用简单的点表示法访问属性:
let employeeName = myEmployeeObject.employeeName
但您可以使用相同的表示法轻松地遍历关系:
let departmentName = myEmployeeObject.department.departmentName
您不必担心加入等; CoreData为您处理。
现在,假设您尝试“SQL方式”。您可以基于Employee实体构造一个获取请求,但是指定“要获取的属性”,它同样遍历关系:
let fetch = NSFetchRequest(entity:"Employee")
fetch.propertiesToFetch = ["employeeID", "employeeName", "department.departmentName"]
为此,您需要将获取请求的“resultType”指定为DictionaryResultType:
fetch.resultType = .DictionaryResultType
此查询的结果将是包含相关键和值的字典数组。但是与底层对象的链接丢失了。如果您随后想要访问相关Department
(甚至是Employee
)中的任何详细信息,则必须运行新的获取以获取对象本身。