2013-03-11 35 views
0

Что я здесь делаю неправильно?ELOQUENT update db with save();

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, потому что я не знаю, что нужно будет обновлять из всех столбцов.

+0

Вы уверены, что у вас есть запись пользователя в '$ user', прежде чем вы просматриваете и устанавливаете атрибуты? Кроме того, вы можете использовать 'User :: find ($ user_id_update_user_details ['user_id'])', поскольку вам нужна только одна запись. –

+0

Я честно не сделал бы этого foreach, так как это имеет серьезные проблемы с безопасностью. Вместо этого вы должны определить доступные атрибуты на вашей модели и [назначить массой] (http://laravel.com/docs/database/eloquent#mass-assignment) вход или вручную выбрать каждый из них. Кроме того, я полагаю, вы хотели запросить 'where ('id')' или 'find ($ id)', а не 'where ('user_id')', но я могу ошибаться в этом. – vFragosop

ответ

1

Установите доступный массив в модели и вместо этого используйте заливку. Также ... не ваш идентификатор называется «id»? Если это значение для 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(); 
}); 
+0

Это работает !!! большое спасибо –