部落格未在資料庫中正確顯示或儲存
P粉111641966
P粉111641966 2023-09-01 17:46:54
0
1
597
<p>一旦我刪除了一個博客,它就完全被刪除了。我可以創建一個新的博客,但它不會顯示在網站或資料庫中。這是我的BlogController:</p> <pre class="brush:php;toolbar:false;"><?php namespace App\Http\Controllers; use App\Models\Blog; use Illuminate\Http\Request; class BlogController extends Controller { /*** 顯示資源清單。 * * @return \Illuminate\Http\Response*/ public function index() { $blog = Blog::paginate(5); return view('blogs.index', compact('blog')) ->with('i',(request()->input('page',1)-1)*5); } /*** 顯示建立新資源的表單。 * * @return \Illuminate\Http\Response*/ public function create() { return view('blogs.create'); Blog::create($request->all()); return redirect()->route('blogs.index') ->with('success','部落格創建成功。'); } /*** 在儲存中儲存新建立的資源。 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response*/ public function store(Request $request) { $request->validate([ 'title' => 'required', 'description' => 'required', ]); $blog = new Blog; $blog->title = $request->title; $blog->description = $request->description; $blog->save(); return redirect()->route('blogs.index'); } /*** 顯示指定的資源。 * * @param \App\Blog $blog * @return \Illuminate\Http\Response*/ public function show(Blog $blog) { return view('blogs.show', compact('blog')); } /*** 顯示編輯指定資源的表單。 * * @param \App\Blog $blog * @return \Illuminate\Http\Response*/ public function edit(Blog $blog) { return view('blogs.edit', compact('blog')); } /*** 更新儲存中的指定資源。 * * @param \Illuminate\Http\Request $request * @param \App\Blog $blog * @return \Illuminate\Http\Response*/ public function update(Request $request, Blog $blog) { $request->validate([ 'title' => 'required', 'description' => 'required', ]); // $blog->title = $request->title; // $blog->description = $request->description; $blog->fill($request); // dd($blog); return redirect()->route('blogs.index') ->with('success','部落格更新成功'); } /** * 從儲存中刪除指定的資源。* * @param \App\Blog $blog * @return \Illuminate\Http\Response */ public function destroy(Blog $blog) { $blog->delete(); return redirect()->route('blogs.index') ->with('success','部落格刪除成功'); } }</pre> <p>問題顯然出現在第103行,public function update:<code> $blog->fill($request);</code> 它既不儲存在資料庫中,也不在網頁/部落格中可見。我嘗試刪除那一行,但結果相同。沒有任何變化。我不明白問題可能是什麼。有人可以幫忙嗎? </p>
P粉111641966
P粉111641966

全部回覆(1)
P粉958986070

第一種選擇為了使fill方法起作用,您必須在此之後呼叫$blog->save()

$blog->fill($request); 
$blog->save();

另外,當您使用fill方法時,您正在進行批次賦值。預設情況下,Laravel會保護您免受批次賦值欄位的影響。

開啟您的Blog.php模型,並將要批次賦值的欄位加入到陣列$fillable

/**
 * 可以批量赋值的属性。
 *
 * @var array
 */
protected $fillable = [
    'title',
    'description',
];

第二個選擇是使用update方法(不要忘記在第一個選擇的模型中也加入欄位到$fillable,因為update方法也是批次賦值欄位):

$blog->update($request);

第三種選擇是手動逐一賦值每個字段,就像在store方法中所做的那樣:

$blog->title = $request->title;
 
$blog->description = $request->description;

$blog->save();
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!