我陷入了一个我从未想过的问题。
我有一个formers
表单,其中包含3个字段(name, firstname, status)
。
然后,我的第二种形式是trainings
,其中包含两个字段(date_sitting, fk_former)
。
在这里,我有1个开会日期-> 16/07/2019
,而前一个是Dujardin Luc
。
现在我的问题是,如果我想在2019年7月18日创建一个新的开会。
如何使前Dujardin Luc
在我的下拉列表中显示为18/07/2019或另一个日期?
就我而言,我必须创建2个文件create.blade吗?
第一个将只有一个字段-> date_sitting
第二种形式将具有-> fk_former
?
这是我的TrainingController以获得信息
public function index()
{
$trainings = Training::oldest()->paginate(5);
$formersNoTrainingToday = Training::whereDate('date_sitting', "!=", Carbon::today())
->orWhere('date_sitting', null)->get();
$formers = Former::doesntHave('trainings')->get();
return view('admin.trainings.index', compact('trainings'))
->with('i', (request()->input('page',1) -1)*5);
}
答案 0 :(得分:1)
我无法给您完整的答案,因为有太多事情需要更新,还有几件事需要决定。
首先,您需要更改index()
方法以发送更多和不同的数据。如果某位前培训人员可以连续几天训练,则$formers = Former::doesntHave('trainings')->get();
不再有效-您现在要所有前任培训人员,以便您可以添加新日期。所以现在$formers = Former::get();
。
接下来,您的$formersNoTrainingToday
现在已过时,因为您不想确定今天刚刚不可用的人,您想要一个所有培训日期的列表,因此可以将其与任何日期进行比较用户正在表单中寻找。例如:如果Dujardin Luc
要在20/07/18进行训练,我们不希望他出现在NoTraining列表中,因为我们希望他有空,即使他今天不可用。 >
最后,在控制器端,取决于您要如何在刀片端进行操作,您可能希望包括一个AJAX日期的变量,以用于通过用户请求的特定日期通过以下日期发送给那些前者: AJAX。例如,如果您通过AJAX进行操作,则可能有一种方法可以仅在控制器中按要求的日期发送可用的那些方法(不正确的代码):
public function getFormersWithoutTrainingOnDateRequested($dateRequested){
$formersAvailableToday = Training::whereDate('date_sitting', "!=", Carbon::createFromFormat('Y-m-d', $dateRequested))
->orWhere('date_sitting', null)->get();
return json_encode($formersAvailableToday);
}
下一部分在刀片侧。您在这里有很多选择,但是我推荐的两个选择都涉及某种JS或Jquery。为了填充用户要求的日期的清单,为了获得最佳的用户体验,您应该迅速为他们提供清单。
最快的方法是从索引向页面提供培训列表(date_sitting, fk_former
)。这将作为数据对象存储在刀片页面的某些元素上。然后,当用户单击以更改日期时,JS或Jquery函数会将列表拉入var,将其与以相同方式存储的另一个前者ID列表进行比较,然后仅使用那些前者立即重写选择列表其ID与该日期不匹配。
执行此操作的第二种方法会稍慢一些,但会容易一些。它将涉及返回服务器以获取可用的前者列表。因此,您将在同一选择上具有AJAX函数,该函数可以返回到服务器,以拉出在所选日期可用的那些前者。 AJAX拉取的success()
方法将提供信息以重新编写选择框,甚至可能重新制作整个表单。
对不起,我无法编写所有代码,您必须在所有可能的地方填写空白,但是希望这足以帮助您弄清楚该去哪里。