有些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'
];
}
答案 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”字段和/或手动循环。