Как использовать метод store, чтобы он мог сохранять данные в моей таблице - PullRequest
0 голосов
/ 15 октября 2019

Я имею дело с формой, но мой метод магазина не работает, я не знаю почему. Пожалуйста, не могли бы вы высказать мне некоторые идеи о том, что не так с моим кодом

Я пытался отрегулировать свои отношения в таблице, но все еще не работает

Вот мой контроллер

<?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

Это все, что я создал, но каждый раз, когда я отправляю форму, она просто обновляет страницу.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Вы должны использовать функцию маршрута в вашем действии формы

<form action="{{ route('farm') }}" method="POST">
0 голосов
/ 15 октября 2019

Это потому, что ваша проверка не проходит каждый раз. Вы используете эту проверку

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

farmer_id требуется, но вы не отправляете farmer_id из формы. Таким образом, ваша проверка не проходит каждый раз. Поэтому обязательно отправьте farmer_id из формы.

...