无法更新Laravel4中的记录:SQLSTATE[42S22]: Column not found: 1054未知列'


Unable to update record in Laravel4: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘id’ in ‘where clause'

我试图用Laravel 4和MySQL更新现有的表记录,但是一旦我在编辑表单中输入属性的新文本后单击提交按钮,我得到错误消息:

SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘id’ in ‘where clause’ (SQL: update `persona` set `bio` = new bio where `id` is null)

我在这里做错了什么?

Routes.php:

Route::resource('personas', 'PersonaController');

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

show.blade.php

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

edit.blade.php:

{{ 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() }}
MySQL表:

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

laravel在其模型中定义的默认主键列是id。您正在通过where查找加载您的模型,而不是通过主键,因此您可以加载模型,但保存时,laravel查询生成器不知道您不使用它期望的"id"列。

在你的模型中设置如下:

protected $primaryKey = 'idPersona';

,现在你可以通过:

加载你的模型
Persona::find('place id here');