我正在建造一个带有laravel的门票系统。但是当我取出机票时,反应不会消失?
这是我对数据透视表的迁移:
public function up()
{
Schema::create('reactions_ticket',function(Blueprint $table)
{
$table->integer('ticket_id')->unsigned();
$table->foreign('ticket_id')->references('id')->on('ticket')->onDelete('cascade');
$table->integer('reactions_id')->unsigned();
$table->foreign('reactions_id')->references('id')->on('reactions')->onDelete('cascade');
});
}
这是我的反应表:
public function up()
{
Schema::create('reactions',function(Blueprint $table)
{
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->text('content');
$table->timestamps();
});
}
和我的票表:
public function up()
{
Schema::create('ticket',function(Blueprint $table)
{
$table->increments('id');
$table->string('slug')->nullable();
$table->integer('ticketid')->unsigned();
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('subject_id')->unsigned();
$table->foreign('subject_id')->references('id')->on('subject')->onDelete('cascade');
$table->integer('websites_id')->unsigned();
$table->foreign('websites_id')->references('id')->on('websites')->onDelete('cascade');
$table->integer('status_id')->unsigned();
$table->foreign('status_id')->references('id')->on('status')->onDelete('cascade');
$table->text('content');
$table->timestamps();
});
}
我做错了什么>?
答案 0 :(得分:4)
我总是喜欢自己处理这些操作,而不是让我的id完成。
您可以在Ticket
模型中使用laravels event-handler。
protected static function boot() {
parent::boot();
static::deleting(function($ticket) {
// delete related stuff ;)
$reaction_ids = $ticket->reactions()->lists('id');
Reaction::whereIn($reaction_ids)->delete();
});
}
所以你仍然拥有(如果你需要/需要)softdelete和更多控制的优势。
答案 1 :(得分:0)
你在反应和门票之间有很多人加入。因此,票可以有很多反应,反应可能有很多票。如果删除票证,我不希望删除这些反应,因为这些反应可以附加到其他未删除的票证上。
将删除的内容是该故障单的数据透视表中的条目。如果你想清除所有不再附带票证的反应,那将是一个单独的任务,mysql不会为你级联。
你的表名不是标准的,顺便说一句。它们应该是数据透视表的票据,反应和reaction_ticket。