Я не могу сохранить обновленный профиль в базе данных.
В моем edit.blade.php:
{!! Form::model($user, ['method' => 'PATCH', 'route' => ['profile.update', $user->company_name] ]) !!} // fields {!! Form::submit('Update Profile', ['class' => 'btn btn-primary']) !!} {!! Form::close() !!}
В моем ProfilesController:
public function update($company_name) { $user = User::whereCompanyName($company_name)->firstOrFail(); $user->save(); // no validation implemented flash('You have successfully edited your profile'); return redirect('/'); }
После нажатия кнопки обновления на нем отображается флэш-сообщение, но оно не сохраняется в базе данных. Я прихожу из Rails, и я чувствую, что мне нужно что-то переубедить.
Дело в том, что вы вообще не меняете свою модель пользователя … Вы извлекаете ее, а затем сохраняете ее снова, не задавая никаких полей.
$user = User::whereCompanyName($company_name)->firstOrFail(); // this 'fills' the user model with all fields of the Input that are fillable $user->fill(\Input::all()); $user->save(); // no validation implemented
Если вы используете вышеуказанный метод с
$user->fill(\Input::all());
вам нужно добавить $ fillable array в свою модель пользователя, например
protected $fillable = ['name', 'email', 'password']; // add the fields you need
Если вы явно хотите установить только одно или два (или три …) поля, вы можете просто обновить их с помощью
$user->email = \Input::get('email'); // email is just an example.... $user->name = \Input::get('name'); // just an example... ... $user->save();
Если вы попробовали андер Sinmok, вы, вероятно, получите страницу «whooops», потому что вы использовали
Input::get('field');
вместо
\Input::get('field');
На вашем синтаксисе Blade я предполагаю, что вы используете laravel 5. Так как ваш контроллер находится в пространстве имен, вам нужно добавить a \ before Input для ссылки на корневое пространство имен (или поставить оператор использования поверх своего класса)
Как правило, на сервере разработки вы должны включить отладку. Тогда у вас есть более подробная информация о том, что происходит не так, как просто чист … «кричит …»
В файле config / app.php вы можете установить
'debug' => true;
ИЛИ
вы можете посмотреть http://laravel.com/docs/5.0/configuration И использовать файл .env.
Если вы используете файл .env, убедитесь, что есть запись с чем-то вроде
APP_DEBUG=true
то вы можете получить доступ к этому значению в config / app.php с помощью
'debug' => env('APP_DEBUG'),
В вашей установке должен быть пример .env.example, чтобы дать вам представление о том, как выглядит такой файл.
Похоже, вы не задали значения представления для объекта пользователя.
Попробуйте (обновите это для Laravel 4)
$user = User::whereCompanyName($company_name)->firstOrFail(); $user->field = Input::get("some_field"); // Name of the input field here $user->save(); // no validation implemented flash('You have successfully edited your profile'); return redirect('/');
РЕДАКТИРОВАТЬ
На самом деле, если вы используете Laravel 5, похоже, это должно быть:
$user->field = Request::input('some_field'); // Name of the input field here $user->save(); // no validation implementedenter code here