更新我的Post
模型时,我运行:
$post->title = request('title');
$post->body = request('body');
$post->save();
这不会更新我的帖子。但它应该根据the Laravel docs on updating Eloquent models。为什么我的模型没有更新?
save
succeeded的结果是true
。Post
型号:
class Post extends Model
{
protected $fillable = [
'type',
'title',
'body',
'user_id',
];
....
}
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('/');
}
运行dd($post->save())
返回true
。
运行
$post->save();
$fetchedPost = Post::find($post->id);
dd($fetchedPost);
向我展示$fetchedPost
与以前没有更新数据的帖子相同。
如果'id'列是大写'ID',请检查数据库表。将其更改为小写允许我的save()方法工作。
由于Laravel 5.5 laravel已经改变了一些验证机制,我想你需要尝试这种方式。
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('/');
}
我有同样的问题,并改变我取得模型的方式解决了它!
即使一切都按照你提到的那样工作,也没有保存:
$user = User::find($id)->first();
这是有效的:
$user = User::find($id);
我有同样的结果,因为我在没有主键的情况下过滤了输出列。
$rows = MyModel::where('...')->select('col2', 'col3')->get();
foreach($rows as $row){
$rows->viewed = 1;
$rows->save();
}
固定的
$rows = MyModel::where('...')->select('primary_key', 'col2', 'col3')->get();
在审查时具有完美的意义,如果没有主键,则更新命令将在Null上。
试试这个
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('/');
}
根据我的经验,如果您从数据库中选择一个Eloquent模型并且primary_key
列不是获取列的一部分,那么您的$model->save()
将返回true但数据库中没有任何内容。
因此,而不是做qazxsw poi,而是做qazxsw poi,其中qazxsw poi是目标表上定义的\App\Users::where(...)->first(['email'])
。
如果通过仅检索几列来实现(有时是微优化)对您来说并不重要,那么您可以通过执行\App\Users::where(...)->first(['id','email'])
来获取所有列,在这种情况下,您不需要打扰id
列的名称,因为将获取所有列。
我遇到了同样的问题并找到了解决方法。我发现我无法在我的primary_key
模板上的\App\Users::where(...)->first()
函数中使用primary_key
我的模型。有用的是将save()
调用移动到{{ generateUrl() }}
s home.blade.php
模板的控制器。 (IE,save()
ing在视图之前是return
ed,然后只在home.blade.php
中执行读取操作。)
我(并且是)生成一个save()
以在页面加载时放入一个URL:
return
以下是没有用的。
{{ generateUrl() }}
这能够state
从数据库<!--views/home.blade.php-->
<a href="{{ EveAuth::generateUrl() }}">Add Character</a>
,但它无法// 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;
}
它回来。没有产生任何错误。该函数似乎正常工作......直到我稍后尝试读取find()
的User
,并发现它与URL中的save()
不匹配。
这是做了什么工作。
当页面正在组装时,我没有尝试User
我的state
,我生成了state
,save()
d它,然后呈现页面:
User
登陆根目录会发送到state
的save()
函数:
// routes/web.php
Route::get('/', 'HomeController@index');
然后,当生成URL时,我没有index()
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');
}
这有效!唯一的区别(据我所知)是我在页面组装开始之前对模型进行了save()
ing,而不是在页面组装期间。