将[title]添加到fillable属性,以允许在[App \ Profile]

时间:2019-07-14 11:30:18

标签: laravel methods laravel-5.8

我正在尝试创建编辑配置文件,但是当我单击“编辑配置文件”按钮时,出现以下错误:

  

Illuminate \ Database \ Eloquent \ MassAssignmentException添加[title]   填充属性以允许在[App \ Profile]上进行批量分配

show.blade.php:

<@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-4">
           <img src="https://scontent-cdt1-1.cdninstagram.com/vp/dcca3b442819fc8b9b63f09b2ebde320/5DA9E3CB/t51.2885-19/s150x150/40101184_290824334847414_1758201800999043072_n.jpg?_nc_ht=scontent-cdt1-1.cdninstagram.com" class="rounded-circle">
        </div>

        <div class="col-8">
            <div class="d-flex align-items-baseline">

                <div class="h4 mr-3 pt-2">{{ $user->username }}</div>
                <button class="btn btn-primary">S'abonner</button>
            </div>
            <div class="d-flex">
                <div class="mr-3">{{ $user->posts->count() }} article(s) en vente
            </div>
            <a href=" {{ route('profile.edit', ['username' => $user->username]) }}">Modifier Profile</a>
            <div class="mt-3">
                <div class="font-weight-bold">
                    {{ $user->profile->title }}
                </div>
                <div class="font-weight-bold">
                    {{ $user->profile->description }}
                </div>
            </div>

        </div>
    </div>

    <div class="row mt-5">
        @foreach ($user->posts as $post)

        <div class="col-4">
            <a href="{{ route('posts.show', ['post' => $post->id]) }}"> <img src="{{ asset('storage') . '/' . $post->image }}" class="w-100"></a>
        </div>
        @endforeach
    </div>



</div>
@endsection

ProfileController:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class ProfileController extends Controller
{
    public function show(User $user)
    {
        return view('profile.show', compact('user'));
    }

    public function edit(User $user)
    {
        return view('profile.edit', compact('user'));
    }

    public function update(User $user)
    {
        $data = request()->validate([
            'title' => 'required',
            'description' => 'required'
        ]);

        $user->profile->update($data);

        return redirect()->route('profile.show', ['user' => $user]);
    }
}

edit.blade.php:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Modifier profile</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('profile.update', ['user' => $user]) }}" enctype="multipart/form-data">
                        @csrf
                        @method('PATCH')

                        <div class="form-group">
                            <label for="title">Titre</label>

                            <div class="col-md-6">
                                <input id="title" type="text" class="form-control @error('title') is-invalid @enderror" name="title" value="{{ old('title') ?? $user->profile->title }}"  autocomplete="title" autofocus>

                                @error('title')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="description">Description</label>

                            <div class="col-md-6">
                                <textarea id="description" type="text" class="form-control @error('description') is-invalid @enderror" name="description" autocomplete="description" autofocus>{{ old('description') ?? $user->profile->description }}</textarea>

                                @error('description')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>


                        <div class="form-group">    
                            <div class="custom-file">

                                <input type="file" name="image" class="custom-file-input @error('image') is-invalid @enderror" id="validatedCustomFile" >
                                <label class="custom-file-label" for="validatedCustomFile">Choisir une image</label>
                                @error('image')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    Modifier profile
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Profile.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Profile extends Model
{
    protected $guarder = [];

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

我在这里做错什么,如何摆脱这个错误?

2 个答案:

答案 0 :(得分:1)

您有一个拼写错误,而不是$guarder在模型中添加:

protected $guarded = [];

我不建议使用空的guarded,而是使用$fillable

答案 1 :(得分:0)

在同一控制器模型中,使用

可以自由访问数据库字段
protected $guarded = [];

protected $$fillable= [];