Laravel QueryException on Saving Model: попытка сохранить неправильную модель

Итак, у меня есть две модели в моем маленьком приложении, пост-модель и другая под названием Autovistoria.
Пост модель работает просто отлично, своего рода блог.
Но в то время как я реализую AutovistoriaController и View, похоже, что модель Post вызывается, а не Autovistoria.
Итак, мои маршруты для autovistoria:

//form for new Autovistoria
Route::get('autovistoria/nova','AutovistoriaController@criar');
// Create new Autovistoria
Route::post('autovistoria/nova','AutovistoriaController@salvar_vistoria');

Методы контроллера:

<?php

namespace monografiaHttpControllers;

use IlluminateHttpRequest;
use monografiaAutovistoria;
use monografiaUser;
use Redirect;
use monografiaHttpRequestsAutovistoriaFormRequest;
use monografiaHttpRequests;
use Auth;

class AutovistoriaController extends Controller
{
    public function criar(Request $request)
    {
        // Verifica se usuario pode executar vistoria (Usuários)
        if($request->user()->pode_vistoriar())
        {
            return view('autovistoria.nova');
        }
        else
        {
            return redirect('autovistoria/listar')->withErrors('Você não tem autorização para criar uma vistoria.');
        }
    }
    public function salvar_vistoria(AutovistoriaFormRequest $request)
   {
        $autovistoria = new Autovistoria();
        $autovistoria->endereco = $request->get('endereco');
        $autovistoria->bairro = $request->get('bairro');
        $autovistoria->cep = $request->get('cep');
        $autovistoria->pavimentos = $request->get('pavimentos');
        $autovistoria->autor_id = $request->user()->id;
        $message = 'Vistoria Criada. Você pode iniciá-la quando desejar';
        $autovistoria->save();
        return redirect('autovistoria.nova')->withMessage($message);
    }
}

Запрос Формы:

class AutovistoriaFormRequest extends Request {
    /**
     * Determina se usuário pode fazer a postagem.
     *
     * @return bool
     */
    public function authorize()
    {
        if($this->user()->pode_vistoriar())
        {
            return true;
        }
        return false;
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'endereco' => 'required|unique:posts|max:255',
            'bairro' => 'required|unique:posts|max:255',
            'cep' => 'required',
        ];
    } }

модель:

class Autovistoria extends Model
{
    protected $table = 'autovistoria';
    // Proteje a tabela contra mudanças
    protected $guarded = [];
    // Retorna a instancia do usuário autor da vistoria
    public function autor()
    {
        return $this->belongsTo('monografiaUser','autor_id');
    }
}

путь представления для сохранения является правильным, и даже когда я пытаюсь создать новую модель через tinker это работает, но когда я отправляю через форму, он пытается сохранить в базе данных в posts model вместо Autovistoria, что приводит к

Ошибка SQL: QueryException в соединении.php строка 673: SQLSTATE[42S22]: столбец не найден: 1054 неизвестный столбец ‘endereco’ в предложении where (SQL: select count (*) as aggregate from posts where endereco = Rua Teste)

Кто-нибудь может мне помочь?

редактировать:

Моя схема:

Schema::create('autovistoria', function(Blueprint $table)
{
  $table->increments('id');
  $table->integer('autor_id') -> unsigned() -> default(0);
  $table->foreign('autor_id')
      ->references('id')->on('users')
      ->onDelete('cascade');
  $table->string('endereco')->unique();
  $table->integer('pavimentos');
  $table->text('conteudo');
  $table->text('categoria');
  $table->boolean('vistoriado');
  $table->timestamps();
});

Форма.лезвие

<form action="nova" method="post" name="nova-vistoria">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <div class="form-group">
        <label for="endereco">Digite o endereço da Edificação:</label>
        <input required="required" value="{{ old('endereco') }}" placeholder="Rua Exemplo, numero 2" type="text" name = "endereco" class="form-control" />
    </div>
    <div class="form-group">
        <label for="endereco">Bairro onde está situada:</label>
        <input required="required" value="{{ old('bairro') }}" placeholder="Ex: Barra da Tijuca, Botafoto, Copacabana..." type="text" name = "bairro" class="form-control" />
    </div>
    <div class="form-group">
        <label for="endereco">CEP da edificação (Apenas números):</label>
        <input required="required" value="{{ old('cep') }}" placeholder="21345123" type="text" name = "cep" class="form-control" />
    </div>
    <div class="form-group">
        <label for="pavimentos">Total de pavimentos da edificação:</label>
            <select name = "pavimentos" class="form-control">
                @for($i = 1; $i < 21; $i++)
                    <option value="{{$i}}">{{$i}}</option>"
                @endfor
            </select>
    </div>
    <div class="form-group"><input type="submit" name='salvar' class="btn btn-success" value = "Salvar"/></div>
</form>

2 ответа

  1. Я бы добавил к модели это.

    class Autovistoria extends Model
        {
            protected $table = 'autovistoria';
            // Proteje a tabela contra mudanças
           //https://laravel.com/docs/5.2/eloquent  Mass Assignment
            protected $guarded = ['id'];
            // Retorna a instancia do usuário autor da vistoria
            public function autor()
            {
                return $this->belongsTo('monografia\User','autor_id');
            }
        }
    

    Я бы также проверил, что модель (таблица autovistoria) имеет:
    1) id (int autoincrement)
    2) я бы попытался сохранить модель с фиктивными данными (в методе post), Как это.

     public function salvar_vistoria(AutovistoriaFormRequest $request)
       {
            $autovistoria = new Autovistoria();
            $autovistoria->endereco = "Dummy data";
            $autovistoria->bairro = "Dummy data");
            $autovistoria->cep = "Dummy data";
            $autovistoria->pavimentos = "Dummy data";
            $autovistoria->autor_id = "user id";
            $message = 'Vistoria Criada. Você pode iniciá-la quando desejar';
            $autovistoria->save();
            return redirect('autovistoria.nova')->withMessage($message);
        }
    }
    

    Если модель не сохранена правильно есть и ошибка с моделью. Я был бы полезен, если вы опубликуете файл миграции для этой таблицы или структуры таблицы.

    Дайте мне знать, если это поможет 🙂

  2. Итак, я нашел проблему.

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

    Он работал нормально после изменения имени класса файла миграции