Laravel关系和两种模型的枢轴

时间:2020-11-05 22:24:22

标签: laravel

有些Paper模型的论文,有些User模型的编辑和审阅者,它们通过角色域来区分。编辑者确定哪些审阅者必须审阅存储在ReviewerPaper(user_id, paper_id)模型中的哪些论文,而审阅者的评论则存储在ReviewerComment(reviewer_id, paper_id, comment)模型中。因此,我们有Paper, User, ReviewerPaper, ReviewerComment。由于审阅者在一篇论文上可能有多个评论,因此我没有在ReviewerPaper中包括评论字段。一旦审稿人无法审阅论文(相当于删除{paper_id},{reviewer_id})后,我需要删除其评论,并且我想通过Laravel关系而不是通过遍历模型数据来做到这一点。

我的解决方案是在via中包含字段ReviewerComment,这是ReviewerPaper的外键,但看起来很混乱。

我想知道对此有什么解决方案吗?预先感谢

更新

class User extends Authenticatable
{
    use HasFactory, Notifiable, SoftDeletes, JqGrid;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'family', 'gender', 'birth_date', 'phone', 'country_id', 'university', 
        'role_id', 'email', 'password', 'email_verified_at'
    ];
}

class Paper extends Model
{
    use HasFactory, Notifiable, SoftDeletes, JqGrid;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'title', 'file', 'user_id', 'status'
    ];
}

class ReviewerComment extends Model
{
    use HasFactory, Notifiable, SoftDeletes, JqGrid;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'user_id', 'paper_id', 'comment', 'reviewer_paper_id'
    ];
}

class ReviewerPaper extends Model
{
    use HasFactory, Notifiable, JqGrid;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'user_id', 'paper_id'
    ];
}

1 个答案:

答案 0 :(得分:1)

从来没有像这样尝试过(或看到它完成过),但是在你的鞋子里,我会尝试一下:

$table->foreign(['reviewer_id','paper_id'])->references(['user_id','paper_id'])->on(['reviewer_paper'])->onDelete(['cascade']);

如果失败,您也可以尝试此操作。 :)

$table->foreign(['reviewer_id','paper_id'])->references(['user_id','paper_id'])->on(['reviewer_paper','reviewer_paper'])->onDelete(['cascade']);

如果laravel不支持此功能,那么您可能必须使用“ via”字段和/或手动循环。

相关问题