首页 > 解决方案 > Laravel,迁移关系在某个时间结束

问题描述

嗨,我有以下问题。在 laravel 中,我创建了 2 张桌子、公寓和赞助商,它们具有多对多的关系。根据选择的计划,赞助商有一个可变的持续时间,我在数据透视表中重视(开始时间和结束时间)。我需要公寓和赞助商之间的关系在赞助期结束后自动结束(当日期和日期与数据透视表的 end_time 重合时)。我怎么能做这种事?我想过使用detach,但我不确定如何使用。

标签: laraveldatabase-migration

解决方案


从不同的角度看待这些问题总是一个好主意。就像提到的两条评论一样,您可以在 windows 中使用作业调度或在 linux 系统中使用 cron 作业。下一个选项是在您的数据透视表中创建另一个字段,类似于“活动”。所以这将是一个布尔值,并且总是返回一个真或假。现在您可以结合任务调度和使用自定义工匠命令,您可以继续检查赞助商是否过期,如果确实过期,请将活动字段设置为 false。最重要的是,当您获取数据时,只需过滤您的查询。我不知道您的代码是什么样子,但这是一个数据透视的示例代码以及我将如何过滤它(未经测试):

//Here active null assumes it is false value. Active 1 assumes it is true. So the active field will be nullable
$myQuery = Sponsor::with([‘apartments’ => function($q) {
$q->where(‘active’, null)->get();
}])->get();
//The apartments is assumed to be the pivot relationship in your sponspor model

这只是一个简单的示例,说明如何链接和查询关系,无论是数据透视表还是任何其他表,您都可以像上面提到的那样在其中进行自定义查询。类似的东西应该适用于你的情况


推荐阅读