Laravel Eloquent错误地更新了每一行的价值观

时间:2015-07-06 14:04:17

标签: php mysql laravel eloquent

我的目的:

1.从用户输入中获取行的id,
2.更改所选行的第一行值。

我有一个这样的模型:

myModel.php

class myModel extends Eloquent{
   protected $table = 'myTable';
   protected $primaryKey = 'id';
   public $timestamps = false;
   public incrementing = false;
   protected fillable = array(
      'id', //yes it needs to be fillable...
      'name',
      'surname'
   );
}

myController.php

class myController extends BaseController{
   public function someFunction(){
      $modelInstance = myModel::where('id', Session::get('id'))
         ->where('otherID', Input::get('someHTMLInput'))
         ->first();

      $modelInstance->id = Session::get('id');
      $modelInstance->name = Input::get('someNameInput');
      $modelInstance->surname = Input::get('someSurnameInput');

      $modelInstance->save();
   }
}

以下是发生的事情

我可以很好地发布我从输入中得到的值 2.当涉及到控制器的保存方法时,查询会更新每一行'值包括以下ID号。

即在数据库上

id=1; otherID=1; name=aaa; surname=bbb;
id=1; otherID=2; name=xxx; surname=yyy;
id=1; otherID=3; name=ccc; surname=ddd;

当我尝试更改名称aaa-> rrr时:

id=1; otherID=1; name=rrr; surname=bbb;
id=1; otherID=2; name=rrr; surname=yyy;
id=1; otherID=3; name=rrr; surname=ddd;

提前致谢。

2 个答案:

答案 0 :(得分:1)

Eloquent目前不支持复合主键。如果您想表明对此问题的支持,我们会在over at github进行讨论。

你能做什么,是这样的:

myModel::where('id', Session::get('id'))
    ->where('otherID', Input::get('someHTMLInput'))
    ->update([
        'name' => Input::get('someNameInput'),
        'surname' => Input::get('someSurnameInput')
    ]);

然而,有了这个,您几乎可以使用所有模型功能。它与:

基本相同
DB::table('my_model')->where('id', Session::get('id'))
    ->where('otherID', Input::get('someHTMLInput'))
    ->update([
        'name' => Input::get('someNameInput'),
        'surname' => Input::get('someSurnameInput')
    ]);

答案 1 :(得分:0)

如果id是主键,请将其在数据库中设置为主键,并在需要时自动增量。在此代码中,所有ID都为1,因此它会更新所有行。如果您需要更新与otherId相对应的数据,可以将protected $primaryKey = 'id';设置为protected $primaryKey = 'otherId';