我如何使用存储方法,以便可以将数据保存到我的表中

问题描述 投票:0回答:2

我正在处理表单,但是我的存储方法不起作用,我不知道为什么。拜托,您能给我一些有关我的代码有什么问题的想法吗?

我试图调整我的表关系,但仍然无法正常工作

这里是我的控制人

<?php

namespace App\Http\Controllers;

use App\Animal;
use Auth;
use Illuminate\Http\Request;

class FarmController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */

    public function __construct()
    {
        $this->middleware('auth');
    }


    public function index()
    {
        $animal = Animal::all();
        return view('farm.index', compact('animal'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $user = Auth::user();
        $animal = new Animal();
        return view('farm.create', compact('user', 'animal'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store()
    {
        Animal::create($this->validateRequest());


        return redirect('farm.show');
    }

    /**
     * Display the specified resource.
     *
     * @param Animal $animal
     * @return \Illuminate\Http\Response
     */
    public function show(Animal $animal)
    {
        return view('farm.show', compact('animal'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

    private function validateRequest()
    {
        return request()->validate([
            'farmer_id' => 'required',
            'dateOfBirth' => 'required|date',
            'gender' => 'required',
            'placeOfBirth' => 'required',
        ]);
    }
}

我的动物模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Animal extends Model
{
    protected $guarded = [];
    public function user(){
        return $this->belongsTo(User::class);
    }

    public function clinicdetail(){
        return $this->hasOne(ClinicDetail::class);
    }

    public function slaughterdetail(){
        return $this->hasOne(SlaughterDetail::class);
    }
}

我的用户模型

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'role_id',
    ];

    public function role(){
        return $this->belongsTo(Role::class);
    }
    public function animals(){
        return $this->hasMany(Animal::class);
    }

    public function clinicdetail(){
        return $this->hasMany(ClinicDetail::class);
    }

    public function slaughterdetail(){
        return $this->hasMany(SlaughterDetail::class);
    }
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

动物表

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAnimalsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('animals', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id')->index();
            $table->date('dateOfBirth');
            $table->string('gender');
            $table->string('placeOfBirth');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('animals');
    }
}

我的创建表单

@extends('layouts.app')
@section('title', 'Add Animal')
@section('content')
    <div class="row">
        <div class="col-12">
            <h1>Farm</h1>
        </div>
    </div>
    <h3>Welcome {{ $user->name }} Please Add an animal</h3>
    <div class="row">
        <div class="col-12">
            <form action="{{ url('/farm') }}" method="POST">
                <div class="form-group">
                    <label for="dateOfBirth">Date Of Birth: </label>
                    <input type="date" name="dateOfBirth" class="form-control" placeholder="dd/mm/yyyy">
                </div>
                <div class="pb-5">
                    {{ $errors->first('dateOfBirth') }}
                </div>
                <div class="form-group">
                    <label for="placeOfBirth">Place Of Birth</label>
                    <input type="text" name="placeOfBirth" class="form-control">
                </div>
                <div class="form-group">
                    <label for="gender">Gender: </label>
                    <select name="gender" class="form-control">
                        <option value="M">Male</option>
                        <option value="F">Female</option>
                    </select>
                </div>
                <button type="submit" class="btn btn-primary">Add Farm</button>

                @csrf 
            </form>
        </div>
    </div>
@endsection

这就是我创建的所有内容,但是每次提交表单时,它只会刷新页面。

php laravel eloquent laravel-blade laravel-migrations
2个回答
0
投票

这是因为您的验证每次都会失败。您正在使用此验证

return request()->validate([
    'farmer_id' => 'required',
    'dateOfBirth' => 'required|date',
    'gender' => 'required',
    'placeOfBirth' => 'required',
]);

farmer_id是必需的,但您没有从表单发送任何farmer_id。因此,您的验证每次都会失败。因此,请确保从表单发送farmer_id


0
投票

您应该在表单操作中使用路由功能

<form action="{{ route('farm') }}" method="POST">
© www.soinside.com 2019 - 2024. All rights reserved.