Lors de la mise à jour de mon modèle Post
, je lance:
$post->title = request('title');
$post->body = request('body');
$post->save();
Ceci met pas mettre à jour mon message. Mais il devrait selon les Laravel docs sur la mise à jour des modèles Eloquent . Pourquoi mon modèle n'est-il pas mis à jour?
save
a réussi était true
.modèle Post
:
class Post extends Model
{
protected $fillable = [
'type',
'title',
'body',
'user_id',
];
....
}
contrôleur Post
:
public function store($id)
{
$post = Post::findOrFail($id);
// Request validation
if ($post->type == 1) {
// Post type has title
$this->validate(request(), [
'title' => 'required|min:15',
'body' => 'required|min:19',
]);
$post->title = request('title');
$post->body = request('body');
} else {
$this->validate(request(), [
'body' => 'required|min:19',
]);
$post->body = request('body');
}
$post->save();
return redirect('/');
}
L'exécution de dd($post->save())
renvoie true
.
Fonctionnement
$post->save();
$fetchedPost = Post::find($post->id);
dd($fetchedPost);
me montre que $fetchedPost
est le même message qu'avant sans les données mises à jour.
Vérifiez votre table de base de données si la colonne 'id' est en majuscule 'ID'. Le changer en minuscule a permis à ma méthode save () de fonctionner.
Depuis Laravel 5.5 Laravel ont changé certains mécanismes de validation, je suppose que vous devez essayer de cette façon.
public function store(Request $request, $id)
{
$post = Post::findOrFail($id);
$validatedData = [];
// Request validation
if ($post->type == 1) {
// Post type has title
$validatedData = $request->validate([
'title' => 'required|min:15',
'body' => 'required|min:19',
]);
} else {
$validatedData = $request->validate([
'body' => 'required|min:19',
]);
}
$post->update($validatedData);
return redirect('/');
}
J'ai eu le même problème et changer la façon dont je récupère le modèle a résolu le problème!
N'économisait pas même si tout était censé fonctionner exactement comme vous l'avez mentionné:
$user = User::find($id)->first();
Cela fonctionne:
$user = User::find($id);
J'ai connu le même problème et j'ai trouvé une solution de contournement. J'ai constaté que je ne pouvais pas save()
mon modèle dans une fonction appelée {{ generateUrl() }}
sur mon modèle home.blade.php
. Ce qui a bien fonctionné a été de déplacer l'appel save()
vers le contrôleur qui return
s le modèle home.blade.php
. (IE, save()
ing avant la vue est return
ed, alors n'effectuez que des opérations de lecture dans {{ generateUrl() }}
.)
J'étais (et suis) en train de générer une state
pour mettre une URL lors du chargement de la page:
<!--views/home.blade.php-->
<a href="{{ EveAuth::generateUrl() }}">Add Character</a>
Ci-dessous ce qui n'a pas fonctionné.
// Providers/EveAuth.php
function generateUrl()
{
$authedUser = auth()->user();
if (!$authedUser) {
return "#";
}
$user = User::find($authedUser->id);
$user->state = str_random(16);
$user->save();
$baseUrl = 'https://login.eveonline.com/oauth/authorize?state=';
return $baseUrl . $user->state;
}
Cela a permis de find()
la User
de la base de données, mais il a été impossible de save()
de la récupérer. Aucune erreur n'a été produite. La fonction semblait fonctionner correctement ... jusqu'à ce que j'essaie de lire la variable User
de state
plus tard et de constater qu'elle ne correspondait pas à la variable state
de l'URL.
Voici ce qui a fonctionné.
Au lieu d'essayer de save()
ma User
pendant l'assemblage de la page, j'ai généré la state
, save()
d, puis j'ai rendu la page:
// routes/web.php
Route::get('/', 'HomeController@index');
Atterrir au répertoire racine vous envoie à la fonction index()
de HomeController.php
:
// Controllers/HomeController.php
public function index()
{
$authedUser = auth()->user();
if ($authedUser) {
$user = User::find($authedUser->id);
$user->state = str_random(16);
$user->save();
}
return view('home');
}
Ensuite, lors de la génération de l'URL, je n'avais pas à save()
la User
, seulement à lire:
// Providers/EveAuth.php
function generateUrl()
{
$authedUser = auth()->user();
$user = User::find($authedUser->id);
$baseUrl = 'https://login.eveonline.com/oauth/authorize?state=';
return $baseUrl . $user->state;
}
Cela a fonctionné! La seule différence (à ce que je vois) est que je suis save()
ing le modèle avant que la page ne commence à être assemblée, par opposition à celle pendant la page assemblée.
Essaye ça
public function store($id,Request $request)
{
$post = Post::findOrFail($id);
// Request validation
if ($post->type == 1) {
// Post type has title
$request->validate([
'title' => 'required|min:15',
'body' => 'required|min:19',
]);
$post->update([
'title' => request('title');
'body' => request('body');
]);
} else {
$request->validate([
'body' => 'required|min:19',
]);
$post->update([
'body' => request('body');
]);
}
return redirect('/');
}