【发布时间】:2016-05-25 02:41:32
【问题描述】:
所以,我的小应用中有两个模型,一个是 Post 模型,另一个是 Autovistoria。 Post Model 工作得很好,它有点像博客。 但是当我实现 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 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');
}
}
要保存的视图路径是正确的,即使我尝试通过修补程序创建一个新模型它也可以工作,但是当我通过表单发送时,它会尝试将数据库保存在帖子模型而不是 Autovistoria 中,导致
SQL 错误:Connection.php 第 673 行中的 QueryException:SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列 'endereco'(SQL:从 endereco = Rua 的帖子中选择计数(*)作为聚合睾丸)
有人可以帮我吗?
编辑:
我的架构:
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.blade
<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>
【问题讨论】: