Php 无法更新Laravel4中的记录:SQLSTATE[42S22]:未找到列:1054未知列‘;id’;在‘;其中第'条;

Php 无法更新Laravel4中的记录:SQLSTATE[42S22]:未找到列:1054未知列‘;id’;在‘;其中第'条;,php,mysql,laravel,Php,Mysql,Laravel,我正在尝试使用Laravel 4和MySQL更新现有的表记录,但在编辑表单中为属性输入新文本后,单击提交按钮后,我会收到错误消息: SQLSTATE[42S22]:找不到列:在“where”中找到1054未知列“id” 子句“(SQL:update`persona`set`bio`=new bio,其中`id`为空) 我做错了什么 Routes.php: Route::resource('personas', 'PersonaController'); public function show

我正在尝试使用Laravel 4和MySQL更新现有的表记录,但在编辑表单中为属性输入新文本后,单击提交按钮后,我会收到错误消息:

SQLSTATE[42S22]:找不到列:在“where”中找到1054未知列“id”
子句“(SQL:update`persona`set`bio`=new bio,其中`id`为空)

我做错了什么

Routes.php:

Route::resource('personas', 'PersonaController');
public function show($id)
{
    $persona = Persona::where('idPersona', $id)->first();
    return View::make('personas.show')->with('persona', $persona);
}

public function edit($id)
{
    $persona = Persona::where('idPersona', $id)->first();
    return View::make('personas.edit')->with('persona', $persona);
}

public function update($id)
{
    $persona = Persona::where('idPersona', $id)->first();

    $persona->fName = Input::get('fName');
    $persona->lName = Input::get('lName');
    $persona->mName = Input::get('mName');
    $persona->bio = Input::get('bio');
    $persona->dateBorn = Input::get('dateBorn');
    $persona->dateDied = Input::get('dateDied');
    $persona->save();
    return Redirect::to('personas');
}
{{ Form::model($persona, array('route' => array('personas.update', $persona->idPersona), 'method' => 'PUT')) }} 
<div>
    {{ Form::label('fName', 'First Name: ') }}
    {{ Form::input('text', 'fName', $persona->fName) }}
</div>      
<div>
    {{ Form::label('lName', 'Last Name: ') }}
    {{ Form::input('text', 'lName', $persona->lName) }}
</div>
<div>
    {{ Form::label('mName', 'Middle Name: ') }}
    {{ Form::input('text', 'mName', $persona->mName) }}
</div>
<div>
    {{ Form::label('bio', 'Bio: ') }}
    {{ Form::textarea('bio', $persona->bio) }}
</div>
<div>
    {{ Form::label('dateBorn', 'Birthday: ') }}
    {{ Form::input('text', 'dateBorn', $persona->dateBorn) }}
</div>
<div>
    {{ Form::label('dateDied', 'Deathday: ') }}
    {{ Form::input('text', 'dateDied', $persona->dateDied) }}
</div>
<div>{{ Form::submit('submit edit') }}</div>
{{ Form::close() }}
CREATE TABLE `mountain`.`persona` (
 `idPersona` INT NOT NULL AUTO_INCREMENT,
 `fName` VARCHAR(45) NULL,
 `lName` VARCHAR(45) NULL,
 `mName` VARCHAR(45) NULL,
 `bio` TEXT NULL,
 `dateBorn` VARCHAR(45) NULL,
 `dateDied` VARCHAR(45) NULL,
 PRIMARY KEY (`idPersona`));
角色控制器:

Route::resource('personas', 'PersonaController');
public function show($id)
{
    $persona = Persona::where('idPersona', $id)->first();
    return View::make('personas.show')->with('persona', $persona);
}

public function edit($id)
{
    $persona = Persona::where('idPersona', $id)->first();
    return View::make('personas.edit')->with('persona', $persona);
}

public function update($id)
{
    $persona = Persona::where('idPersona', $id)->first();

    $persona->fName = Input::get('fName');
    $persona->lName = Input::get('lName');
    $persona->mName = Input::get('mName');
    $persona->bio = Input::get('bio');
    $persona->dateBorn = Input::get('dateBorn');
    $persona->dateDied = Input::get('dateDied');
    $persona->save();
    return Redirect::to('personas');
}
{{ Form::model($persona, array('route' => array('personas.update', $persona->idPersona), 'method' => 'PUT')) }} 
<div>
    {{ Form::label('fName', 'First Name: ') }}
    {{ Form::input('text', 'fName', $persona->fName) }}
</div>      
<div>
    {{ Form::label('lName', 'Last Name: ') }}
    {{ Form::input('text', 'lName', $persona->lName) }}
</div>
<div>
    {{ Form::label('mName', 'Middle Name: ') }}
    {{ Form::input('text', 'mName', $persona->mName) }}
</div>
<div>
    {{ Form::label('bio', 'Bio: ') }}
    {{ Form::textarea('bio', $persona->bio) }}
</div>
<div>
    {{ Form::label('dateBorn', 'Birthday: ') }}
    {{ Form::input('text', 'dateBorn', $persona->dateBorn) }}
</div>
<div>
    {{ Form::label('dateDied', 'Deathday: ') }}
    {{ Form::input('text', 'dateDied', $persona->dateDied) }}
</div>
<div>{{ Form::submit('submit edit') }}</div>
{{ Form::close() }}
CREATE TABLE `mountain`.`persona` (
 `idPersona` INT NOT NULL AUTO_INCREMENT,
 `fName` VARCHAR(45) NULL,
 `lName` VARCHAR(45) NULL,
 `mName` VARCHAR(45) NULL,
 `bio` TEXT NULL,
 `dateBorn` VARCHAR(45) NULL,
 `dateDied` VARCHAR(45) NULL,
 PRIMARY KEY (`idPersona`));
show.blade.php

<h3>ID: {{ $persona->idPersona }}</h3>

{{ link_to("/personas/{$persona->idPersona}/edit", 'Edit this persona') }}

laravel在其模型中定义的默认主键列是
id
。您是通过
where
查找来加载模型的,而不是通过主键,因此您可以加载模型,但在保存时,laravel query builder不知道您没有使用它期望的“id”列

在您的模型中,设置以下内容:

protected $primaryKey = 'idPersona';
现在,您可以通过以下方式加载模型:

Persona::find('place id here');