Учитывая следующую модель данных, существует ли способ обновить или установить дочерние отношения без обновления (существующего) дочернего объекта?Область применения: обновление/установка отношения без обновления существующего дочернего объекта
Data Model
class Person: Object {
dynamic var id = 0
dynamic var dog: Dog?
override static func primaryKey() -> String? {
return "id"
}
}
class Dog: Object {
dynamic var id = 0
dynamic var name = ""
override static func primaryKey() -> String? {
return "id"
}
}
Код
let realm = Realm()
// query existing dog
let existingDog = realm.objectForPrimaryKey(Dog.self, key: 42)
print(existingDog) // id: 42, name: Rex
// create new dog and person
let newDog = Dog(value: ["id": 42, "name": "Pluto"])
let person = Person()
realm.write {
// this shouldn't update the existing dog
// i.e. the name of the dog with id: 42 in the database should still be "Rex"
person.dog = newDog
realm.add(person, update: true)
}
Я также пытался сделать это с помощью realm.create
, но успеха не имел ни. Есть идеи?
Спасибо за ваш ответ. Возможно, я не был так ясен: я хочу создать связь между Лицом и Собакой с id 42, который уже существует в базе данных. В SQL-разговоре я хотел бы установить 'person.dog_id = 42'. – schickling
Вы создали отношения между собакой и человеком. Это не защитит вас, однако, от переопределения объекта в таблице собак с одинаковым идентификатором. Под областью капота, вероятно, создается таблица для вас с колонками: personId и dogId. Там он определяет отношения 1: 1 для вас. Это не влияет на вашу собаку. Таблица в любом случае – ezcoding
ezcoding правильна, основная цель первичного ключа - сделать каждый объект уникальным, другая проблема заключается в том, что у вас в настоящее время есть соотношение 1: 1. Кажется, что вы хотите, чтобы человек был связан с несколькими собаками, поэтому вы должны использовать отношения «один ко многим» с let dogs = List(). Каков конечный результат, который вы пытаетесь получить? Вы хотите удалить предыдущую собаку, а затем добавить новую, но не удалить Собака из базы данных? –
yoshyosh