【问题标题】:Define model relationships in complex business logic in Laravel在 Laravel 中定义复杂业务逻辑中的模型关系
【发布时间】:2015-09-03 14:47:42
【问题描述】:

现在我有了这些业务逻辑,但不知道如何在 Laravel 中定义它。

首先,有两个基本模型名为contactproject,而contactproject 模型拥有多对多关系,因此我将它们定义如下:

class Contact extends Model{
    public function projects(){
        return $this->belongsToMany('App\Project', 'proj_staff')
            ->withPivot('role', 'superior');
    }
}

Project一样:

class Project extends Model{
    public function contacts(){
        return $this->belongsToMany('App\Contact', 'proj_staff')
            ->withPivot('role', 'superior');
    }
}

如您所见,每个contact 在他的project 中都有一个superior,所以随之而来的问题是如何定义一个关系来访问superior,如下所示:$contact->projects[0]->superiors ,而superiors 最好返回一个模型集合,而不仅仅是id

谢谢。

【问题讨论】:

    标签: laravel model


    【解决方案1】:

    您正在通过 contacts 访问 projects 并且您想访问 projectscontacts 数据透视表 proj_staff 来自您的 projects 模型的信息。

    所以你必须在你的 Project 中创建另一个关系 模型来访问数据透视表中的数据

    class Project extends Model{
        public function contacts(){
            return $this->belongsToMany('App\Contact', 'proj_staff')
                ->withPivot('role', 'superior');
        }
    
        //your project table has one to many many relationship with proj_staff table
        public function superiors(){
            return $this->hasMany('App\ProjStaff', 'superior', 'superior');//set relation keys I assume it's superior is local and foreign key
        }
    }
    
    //Create ProjStaff Pivot Table Model under app directory same level with your Contact model
    class ProjStaff extends Model{
        //add fillable
        //add table name
    
    }
    

    现在您可以轻松访问 $contact->projects[0]->superiors->pluck('superior')->all()

    【讨论】:

    • 同时上级是Contact模型,是两个联系人之间的关系,但受到Project的限制。也就是说superior是由@987654333两者共同决定的@ 和Project,在一个项目中,某些联系人将优于某些联系人。
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多