2016-05-24 19 views
0

私の小さなアプリケーションには2つのモデルがあり、PostモデルとAutovistoriaという2つのモデルがあります。 ポストモデルはうまく機能しています。その種類のブログです。 しかし、私はAutovistoriaControllerとViewを実装していますが、Autovistoriaの代わりにPostモデルが呼び出されているようです。 だから、autovistoriaのための私のルートは以下のとおりです。Laravel QueryException保存中モデル:間違ったモデルを保存しようとしています

//form for new Autovistoria 
Route::get('autovistoria/nova','[email protected]'); 
// Create new Autovistoria 
Route::post('autovistoria/nova','[email protected]_vistoria'); 

コントローラのメソッド:

<?php 

namespace monografia\Http\Controllers; 

use Illuminate\Http\Request; 
use monografia\Autovistoria; 
use monografia\User; 
use Redirect; 
use monografia\Http\Requests\AutovistoriaFormRequest; 
use monografia\Http\Requests; 
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('monografia\User','autor_id'); 
    } 
} 

ビューへのパス保存が正しく、私は新しいモデルを作成しようとしても、それが動作しますが、私はフォームを介して送信すると、自動投稿の代わりに投稿モデルのデータベースに保存しようとします。

SQLエラー: Connection.php 673行:SQLSTATE [42S22]:列が見つかりません:1054 'where句'内の 'endereco'の列が不明です(SQL: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> 

答えて

0

をので、私は問題を発見した場合、私に教えてください。

問題は移行ファイルです。 私はクラスを名前を変更しました(名前は複数あり、AutovistoriasからAutovistoriaに名前を変更しました)。しかし、マイグレーションファイルのクラス名は変更されていません。

それは

0

が、私はこのモデルに追加しますform.blade ..

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

私も希望モデル(テーブルオートバイ)には次のものがあることを確認します。 1)ID(int型自動インクリメント) 2)私はこのようなポスト方式でダミーデータ()でモデルを保存しようとする...

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

正しくを保存しませんモデルが存在する場合モデルとの誤差。私は、このテーブルまたはテーブルの構造体の移行ファイルを投稿すると便利です。

は、このことができます:)

+0

移行ファイルのクラス名を変更した後、うまく働いたあなたのDBスキーマを表示... – WahidSherief

+0

だから、それはダミーデータで仕事をしました。 –

関連する問題