Accessing parent properties of CoreStoreObject entity is prohibited? #433

Open
opened 2025-12-29 18:26:53 +01:00 by adam · 0 comments
Owner

Originally created by @vovsyannikov on GitHub (Jun 26, 2024).

I have a structure in may app where I have a parent object:

open class BaseContact: CoreStoreObject {
    @Field.Stored("externalId")
    open var externalId: Int?

    @Field.Stored("isUser")
    open var isUser: Bool = false    

    // Other props
}

A child and another entity:

final public class Contact: BaseContact {
    // Other props

    @Field.Relationship("userDL", inverse: \DBS.UserDL.$contact)
    public var userDL: DBS.UserDL?

    // Other props
}

final public class UserDL: CoreStoreObject {
    // Other props

    @Field.Relationship("contact")
    public var contact: DBS.Contact?

    // Other props
}

When trying to fetch Contact specifically by isUser property I get an error:

func contactIsUser() -> DBS.Contact? {
    try? fetchOne(where: \DBS.Contact.$isUser == true)
}

Binary operator '==' cannot be applied to operands of type 'KeyPath<DBS.Contact, FieldContainer<DBS.BaseContact>.Stored<Bool>>' and 'Bool'

Same thing with:

func currentUserDL(withContactID externalId: Int?) -> DBS.UserDL? {
    try? fetchOne(where: \.$contact ~ \.$externalId == externalId)
}

There's a different error but in the same vein:
Operator function '~' requires the types 'Optional<DBS.Contact>.DestinationObjectType' (aka 'DBS.Contact') and 'FieldContainer<DBS.BaseContact>.Stored<Int?>.ObjectType' (aka 'DBS.BaseContact') be equivalent

Originally created by @vovsyannikov on GitHub (Jun 26, 2024). I have a structure in may app where I have a parent object: ```Swift open class BaseContact: CoreStoreObject { @Field.Stored("externalId") open var externalId: Int? @Field.Stored("isUser") open var isUser: Bool = false // Other props } ``` A child and another entity: ```Swift final public class Contact: BaseContact { // Other props @Field.Relationship("userDL", inverse: \DBS.UserDL.$contact) public var userDL: DBS.UserDL? // Other props } final public class UserDL: CoreStoreObject { // Other props @Field.Relationship("contact") public var contact: DBS.Contact? // Other props } ``` When trying to fetch `Contact` specifically by `isUser` property I get an error: ```Swift func contactIsUser() -> DBS.Contact? { try? fetchOne(where: \DBS.Contact.$isUser == true) } ``` `Binary operator '==' cannot be applied to operands of type 'KeyPath<DBS.Contact, FieldContainer<DBS.BaseContact>.Stored<Bool>>' and 'Bool'` Same thing with: ```Swift func currentUserDL(withContactID externalId: Int?) -> DBS.UserDL? { try? fetchOne(where: \.$contact ~ \.$externalId == externalId) } ``` There's a different error but in the same vein: `Operator function '~' requires the types 'Optional<DBS.Contact>.DestinationObjectType' (aka 'DBS.Contact') and 'FieldContainer<DBS.BaseContact>.Stored<Int?>.ObjectType' (aka 'DBS.BaseContact') be equivalent`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/CoreStore-JohnEstropia#433