拉拉威尔关系和两种模式的支点



Paper模型的一些论文和User模型的一些编辑和审稿人通过角色字段进行区分。编辑确定哪些评审员必须评审哪些论文存储在ReviewerPaper(user_id, paper_id)模型中,评审员的评论存储在ReviewerComment(reviewer_id, paper_id, comment)模型中。因此我们有了Paper, User, ReviewerPaper, ReviewerComment。因为审稿人可能对一篇论文有多条评论,所以我没有在ReviewerPaper中包含评论字段。一旦审稿人没有审查论文,我就需要删除他的评论(相当于删除了{paper_id},{reviewer_id}(,我想通过Laravel关系而不是通过循环模型数据来做到这一点。

我的解决方案是在ReviewerComment中包含一个字段via,它是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'
];
}

从来没有这样尝试过(或看到过(,但从你的角度来看,我会尝试一下:

$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不支持这一点,那么你可能不得不使用";通过";字段和/或循环。

最新更新