【问题标题】:ELOQUENT update db with save();ELOQUENT 使用 save() 更新数据库;
【发布时间】:2013-02-26 10:22:17
【问题描述】:

我在这里做错了什么?

public static function updateuserdetails(){

   $user_id_update_user_details = Input::get();
    // find the user to update : 
   $user = User::where( 'user_id' , '=', $user_id_update_user_details['user_id'] )->first() ;

   foreach ( $user_id_update_user_details as $key => $value) {        
       $user->$key = $value ;
   }

 $affected = $user->save();
 return $affected ;
} 

它不会将数据保存到数据库中。我必须使用“foreach”循环,因为我不知道需要从所有列中更新什么。

【问题讨论】:

  • 在查看和设置属性之前,您确定在$user 中有用户记录吗?此外,您可以使用User::find($user_id_update_user_details['user_id']),因为您只需要一条记录。
  • 老实说我不会这样做 foreach 因为这有一些严重的安全问题。相反,您应该在模型上定义可访问属性,并在输入中定义 mass assign 或手动选择每个属性。另外,我想您想查询where('id')find($id) 而不是where('user_id'),但我可能错了。

标签: mysql laravel eloquent


【解决方案1】:

在模型中设置可访问数组并使用填充代替。还有……你的身份证不是叫“身份证”吗?如果是这样,为 user_id 设置一个值可能会导致底层 SQL 失败。

class User extends Eloquent {

    public static $accessible = array( 'id', 'name', 'email', ... );

}

Route::post( 'user/save', function ()
{
    $user = User::find( Input::get( 'id' ) );

    if ( empty( $user ) )
        return 'Could not find user';

    $user->fill( Input::get() );

    $user->save();
});

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2012-08-29
    • 2012-08-08
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多