所以,我的小应用程序中有两个模型,一个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未知列&#39; endereco&#39;在&#39; where子句&#39; (SQL:从countreco = Rua Teste的帖子中选择count(*)作为聚合)
有人可以帮助我吗?
编辑:
我的架构:
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>
答案 0 :(得分:0)
我会在模型中添加这个..
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);
}
}
如果模型不能保存,则模型存在错误。如果您发布此表或表sctructure的迁移文件,我会很有用。
请告诉我这是否有帮助:)
答案 1 :(得分:0)
所以,我发现了问题。
问题是迁移文件。 我重命名了这个类(名称是复数,我取出了它,从Autovistorias重命名为Autovistoria),但没有更改迁移文件类名,因此它无法正常工作。
更改迁移文件类名
后,它工作正常