简体   繁体   中英

How do I use the store method so that it can save data to my table

I am dealing with form but my store method is not working I do not know why. Please, could you highlight me with some ideas of what wrong with my code

I have tried to adjust my table relationship but still is not working

Here is my controller

<?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',
        ]);
    }
}

My animal model

<?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);
    }
}

my user model

<?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',
    ];
}

animal table

<?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');
    }
}

my create form

@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

That is everything I have created but every time I submit the form, it just refreshes the page.

Its because your validation fails every time. you are using this validation

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

farmer_id is required but you are not sending any farmer_id from the form. So your validation fails every time. So make sure to send farmer_id from the form.

You should use route function in your form action

<form action="{{ route('farm') }}" method="POST">

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM