【问题标题】:Eloquent Models with relationships for lucadegasperi/oauth2-server-laravel具有 lucadegasperi/oauth2-server-laravel 关系的雄辩模型
【发布时间】:2017-05-15 20:08:56
【问题描述】:

任何人都有 lucadegasperi/oauth2-server-laravel 包的实际 Eloquent 模型。迁移对关系不是很清楚,尤其是多对多。不确定哪一边应该是 hasMany() 和 belongsToMany()。尝试按照迁移为 Neo4j 数据库制作模型。

【问题讨论】:

    标签: oauth-2.0 laravel-eloquent neoeloquent


    【解决方案1】:

    在关系方面,鉴于 Neo4j 中的所有关系都是有向的:

    • hasMany 是一个 OUTGOING 关系 (node1)-[:REL]->(node2) 其中 node1 可以有多个这种类型的传出关系
    • belongsToMany 是一个传入关系(node1)<-[:INCOME]-(node2),其中node1 可以有多个此类传入关系

    node1 表示带有标签(即User)的模型,其具有诸如Post(hasMany)和Tag(belongsToMany 帖子)之类的关系,因此您必须将模型类中的关系定义为关注

    class User
    {
        public function posts()
        {
            return $this->hasMany(Post::class, 'POSTED');
        }
    }
    
    class Post
    {
        public function user()
        {
            // reverse of "posts" and must have the same name "POSTED"
            return $this->belongsTo(User::class, 'POSTED'); 
        }
    
        public function tags()
        {
            return $this->hasMany(Tag::class, 'TAGGED_WITH');
        }
    }
    
    class Tag
    {
        public function posts()
        {
            // reverse of "tags" and must have the same name "TAGGED_WITH"
            return $this->belongsToMany(Post::class, 'TAGGED_WITH');
        }
    }
    

    你会得到以下结果:

    • (:User)-[:POSTED]->(:Post)
    • (:Post)-[:TAGGED_WITH]->(:Tag)

    您将能够从任何一侧引用任何节点。

    我没有使用 lucadegasperi/oauth2-server-laravel 包,但如果他们有关于模型之间关系应该如何的说明,你应该很高兴。

    【讨论】:

    • 感谢您的回复。是的,lucadegasperi/oauth2-server-laravel 包不是很清楚哪一边是传入/传出。希望他们拥有实际的模型,而不仅仅是迁移。
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2013-06-04
    • 2016-11-26
    • 2018-02-19
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    相关资源
    最近更新 更多