我正在尝试为用户设置一种基本的方式来创建一周的用餐计划。我已经尝试过几种方法,但由于这是我的第一个项目,我严重卡住了自动取款机。
因此,下面我将展示我已经采取的步骤,并解释我的想法。
create_meal_plans_table.php
我喜欢让表格尽可能简单,然而这可能会让我失败。我最初将星期一到星期五的日期显示为单独的字符串,但它很混乱,因此决定将其放在自己的日表中。
然后我添加了一个标题,以便在用户配置文件中,他们可以从下拉菜单中选择特定的餐饮计划,它将显示出来。
剩下的就不言而喻了。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMealPlansTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('meal_plans', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('day_id');
$table->string('title');
$table->string('breakfast');
$table->string('lunch');
$table->string('dinner');
$table->string('snack');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('meal_plans');
}
}create_days_table
我不确定以字符串形式保留天数是否正确。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDaysTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('days', function (Blueprint $table) {
$table->id();
$table->mediumText('monday'); //medium height text
$table->mediumText('tuesday'); //medium height text
$table->mediumText('wednesday'); //medium height text
$table->mediumText('thursday'); //medium height text
$table->mediumText('friday'); //medium height text
$table->mediumText('saturday'); //medium height text
$table->mediumText('sunday'); //medium height text
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('days');
}
}Meal/create.blade.php
而不是解释这一点,我将截图它的外观,并在下面显示它。
@extends('layouts.app')
@section('content')
<head>
<style>
table .button {
background-color: transparent;
border: none;
color: black;
padding: 16px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
/*transition-duration: 0.4s;*/
cursor: pointer;
}
table {
margin-left: auto;
margin-right: auto;
}
td {
width: 8rem;
height: 4rem;
border: 1px solid #ccc;
text-align: center;
}
th {
background: lightblue;
border-color: white;
}
body {
padding: 1rem;
}
</style>
</head>
<body>
<div class="container">
<form action="/mp" enctype="multipart/form-data" method="post">
@csrf
<div class="row">
<div class="col-8 offset-2">
<div class="row pb-3">
<h1>Add Meal Plan</h1>
</div>
<div class="row">
<table class="table" >
<tr>
<td><button class="button-1 button">MON</button></td>
<td><button class="button-2 button">TUE</button></td>
<td><button class="button-3 button">WED</button></td>
</tr>
<tr>
<td><button class="button-4 button">THURS</button></td>
<td><button class="button-5 button">FRI</button></td>
<td><button class="button-6 button">SAT</button></td>
</tr>
<tr>
<td></td>
<td><button class="button-7 button">SUN</button></td>
<td></td>
</tr>
</table>
</div>
<header>Enter Meals</header>
<div class="form-outer">
<form action="/mp" enctype="multipart/form-data" method="post">
@csrf
<div class="field">
<label for="caption" class="col-md-4 col-form-label">Day</label>
<select>
<option> --Select Tags--</option>
<option id="monday"
class="form-control"
name="monday">
Monday</option>
<option id="tuesday"
class="form-control"
name="tuesday">
Tuesday</option>
<option id="wednesday"
class="form-control"
name="wednesday">
Wednesday</option>
<option id="thursday"
class="form-control"
name="thursday">
Thursday</option>
<option id="friday"
class="form-control"
name="friday">
Friday</option>
<option id="saturday"
class="form-control"
name="saturday"
>Saturday</option>
<option id="sunday"
class="form-control"
name="sunday"
>Sunday</option>
</select>
@if ($errors->has('day_id'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('day_id') }}</strong>
</span>
@endif
</div>
<div class="field">
<label for="caption" class="col-md-4 col-form-label">Breakfast</label>
<input id="breakfast"
type="text"
class="form-control{{ $errors->has('breakfast') ? ' is-invalid' : '' }}"
name="breakfast"
value="{{ old('breakfast') }}"
autocomplete="name" autofocus>
@if ($errors->has('breakfast'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('breakfast') }}</strong>
</span>
@endif
</div>
<div class="field">
<label for="caption" class="col-md-4 col-form-label">Lunch</label>
<input id="lunch"
type="text"
class="form-control{{ $errors->has('lunch') ? ' is-invalid' : '' }}"
name="lunch"
value="{{ old('lunch') }}"
autocomplete="name" autofocus>
@if ($errors->has('lunch'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('lunch') }}</strong>
</span>
@endif
</div>
{{-- <div class="field">--}}
{{-- <label for="caption" class="col-md-4 col-form-label">Snack</label>--}}
{{-- <input id="snack"--}}
{{-- type="text"--}}
{{-- class="form-control{{ $errors->has('snack') ? ' is-invalid' : '' }}"--}}
{{-- name="snack[]"--}}
{{-- value="snack3{{ old('snack') }}"--}}
{{-- autocomplete="name" autofocus>--}}
{{-- @if ($errors->has('snack'))--}}
{{-- <span class="invalid-feedback" role="alert">--}}
{{-- <strong>{{ $errors->first('snack') }}</strong>--}}
{{-- </span>--}}
{{-- @endif--}}
{{-- </div>--}}
<div class="field">
<label for="caption" class="col-md-4 col-form-label">Dinner</label>
<input id="dinner"
type="text"
class="form-control{{ $errors->has('meal') ? ' is-invalid' : '' }}"
name="dinner"
value="{{ old('dinner') }}"
autocomplete="name" autofocus>
@if ($errors->has('dinner'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('dinner') }}</strong>
</span>
@endif
</div>
<div class="field">
<label for="caption" class="col-md-4 col-form-label">Snack</label>
<input id="snack"
type="text"
class="form-control{{ $errors->has('snack') ? ' is-invalid' : '' }}"
name="snack"
value="{{ old('snack') }}"
autocomplete="name" autofocus>
@if ($errors->has('snack'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('snack') }}</strong>
</span>
@endif
</div>
{{-- <div class="field">--}}
{{-- <label for="caption" class="col-md-4 col-form-label">Snack</label>--}}
{{-- <input id="snack"--}}
{{-- type="text"--}}
{{-- class="form-control{{ $errors->has('snack') ? ' is-invalid' : '' }}"--}}
{{-- name="snack[]"--}}
{{-- value="snack4{{ old('snack') }}"--}}
{{-- autocomplete="name" autofocus>--}}
{{-- @if ($errors->has('snack'))--}}
{{-- <span class="invalid-feedback" role="alert">--}}
{{-- <strong>{{ $errors->first('snack') }}</strong>--}}
{{-- </span>--}}
{{-- @endif--}}
{{-- </div>--}}
<div class="row pt-4">
<button class="btn btn-primary">Add New Post</button>
</div>
</form>
</div>
</div>
</div>
</form>
</div>
</body>
@endsection将更正select day下拉列表。

MealPlanController.php
<?php
namespace App\Http\Controllers;
use App\MealPlan;
use Illuminate\Http\Request;
class MealPlanController extends Controller
{
public function __construct()
{
$this->middleware('auth', ['except' => ['show']]);
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
*/
public function index()
{
$users = auth()->user()->following()->pluck('profiles.user_id');
$plans = MealPlan::whereIn('user_id', $users)->with('user')->latest()->paginate(5);
return view('meal.create.index', compact($plans));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
*/
public function create()
{
return view('meal.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Routing\Redirector
*/
public function store()
{
$data = request()->validate([
'day_id' => 'required',
'breakfast' => 'required',
'lunch' => 'required',
'dinner' => 'required',
'snack' => 'required',
]);
auth()->user()->plans()->create([
'day_id' => $data['day_id'],
'breakfast' => $data['breakfast'],
'lunch' => $data['lunch'],
'dinner' => $data['dinner'],
'snack' => $data['snack'],
]);
return redirect('/profile/' . auth()->user()->id);
}
/**
* Display the specified resource.
*
* @param \App\MealPlan $mealPlan
* @return \Illuminate\Http\Response
*/
public function show(MealPlan $mealPlan)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\MealPlan $mealPlan
* @return \Illuminate\Http\Response
*/
public function edit(MealPlan $mealPlan)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\MealPlan $mealPlan
* @return \Illuminate\Http\Response
*/
public function update(Request $request, MealPlan $mealPlan)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\MealPlan $mealPlan
* @return \Illuminate\Http\Response
*/
public function destroy(MealPlan $mealPlan)
{
//
}
}无论何时尝试发布它,它都只是刷新页面。无论我能得到什么建议,我都将不胜感激。我甚至可以传递我的电子邮件,如果我能得到更多的建议,否则很难在这里解释。
谢谢。
发布于 2021-05-04 12:25:45
您在这里还有很多需要改进的地方。
像这样改变你的日程表
Schema::create('days', function (Blueprint $table) {
$table->id();
$table->string('day');
$table->timestamps();
});那么你应该像这样写一个种子程序。
public function run()
{
$days = [
['id' => 1, 'day' => 'Monday'],
['id' => 2, 'day' => 'Tuesday'],
['id' => 3, 'day' => 'Wednesday'],
['id' => 4, 'day' => 'Thursday'],
['id' => 5, 'day' => 'Friday'],
['id' => 6, 'day' => 'Saturday'],
['id' => 7, 'day' => 'Sunday'],
];
foreach ($days as $key => $day) {
DB::table('days')->insert($day);
}
}这样就可以很容易地在下拉列表中获取日期。
您应该为选择框添加一个名称属性。现在,您有了选项的名称属性。这是错误的。
Snack是一个数组还是一个字符串?这两个你都有。因为你像存储文本一样存储它。它不应该是数组。
最后,应更改存储
public function store(Request $request)
{
$data = $request()->validate([
'day_id' => 'required',//Should come from the days table
'breakfast' => 'required',
'lunch' => 'required',
'dinner' => 'required',
'snack' => 'required',
]);
auth()->user()->plans()->create([
'day_id' => $request->get('day_id'),
'breakfast' => $request->get('breakfast'),
'lunch' => $request->get('lunch'),
'dinner' => $request->get('dinner'),
'snack' => $request->get('snack')
]);
return redirect('/profile/' . auth()->user()->id);
}试试这个,然后让我知道。
https://stackoverflow.com/questions/67378255
复制相似问题