在Realm中缺少主键属性

时间:2017-07-31 02:26:00

标签: javascript reactjs react-native realm

我得到的错误是Missing primary key property 'email'。我对数据库完全陌生,想知道我的代码是什么问题。

另外,我正确地写入数据库吗?如果我成功将项目放入数据库,那么我将如何查看它?

我为此寻找了SO和谷歌,但无法找到具体的答案。

error I'm getting

这是.js档案:

import React, { Component } from 'react';
import {TextInput, KeyboardAvoidingView, Text, StyleSheet, TouchableOpacity} from 'react-native';
import Third from './Third';

class Second extends Component {
    onButtonPress() {
        this.props.navigator.push({
            id: 'Third' // .js file name
        });
    }

    render() {
        const Realm = require('realm');

        class Email {}
            Email.schema = {
                name: 'Email',
                primaryKey: 'email',
                properties: {
                    name: 'string',
                },
        };

        const realm = new Realm({schema: [Email]});

// Query
        let email = realm.objects('Email');
        // email.length // => 0

// Write
        realm.write(() => {
            email = realm.create('Email', {
                name: 'something',
            });
        });

        return(
            <KeyboardAvoidingView style={styles.container}>

                <TextInput
                    style={styles.userInput}
                    placeholder={" email"}
                />

                <TextInput
                    style={styles.userInput}
                    placeholder={" password"}
                    secureTextEntry={true}
                />

                <TouchableOpacity style={styles.buttonContainer}>
                    <Text onPress={this.onButtonPress.bind(this)} style={styles.buttonText}>Submit</Text>
                </TouchableOpacity>

            </KeyboardAvoidingView>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        padding: 20 // makes button horizontally longer.
    },

    userInput: {
        marginBottom: 20,
        height: 40,
        borderWidth: 4

    },

    userInput: {
        marginBottom: 20,
        backgroundColor: '#9b42f4',
        height: 40,
        borderRadius: 10,
        borderWidth: 1
    },

    buttonContainer: {
        backgroundColor: '#41bbf4',
        paddingVertical: 10,
        marginBottom: 20,
        borderRadius: 10
    },

    buttonText: {
        textAlign: 'center',
        color: '#FFFFFF'
    }
});

export default Second;

1 个答案:

答案 0 :(得分:0)

错误是因为您在架构中使用email作为主键,这在创建Email对象时成为必需属性。您的意思是将name作为主键而不是email吗?或类似id属性。

摆脱此错误的一种方法是使用email替换primaryKey设置中的name

要查看您的数据,您可以使用https://github.com/realm/realm-browser-osx,但它现在仅在Mac OS上可用。

P.S。当您进行架构更改时,您可能希望删除该应用程序并重新安装它。如果你刚刚开始开发它,现在很好。 稍后,您应该增加架构版本,并在商店中获得应用程序后编写迁移。 (甚至可能在此之前开始)