使用Livewire存储PDF文件路径至数据库失败问题排查
问题描述
我用Livewire尝试把PDF文件路径存入数据库,但这个功能失效了。图片存储正常,PDF也成功保存到服务器,用dd($book)调试能看到正确的PDF路径,但数据库里的pdf字段始终是空的。
相关代码
$this->validate(); $book =[ 'title'=>$this->title, 'author'=>$this->author, 'genre'=>$this->genre, 'link'=>$this->link, 'store_link'=>$this->store_link, 'language'=>$this->language, 'published_date'=>$this->publish_date, 'ISBN'=>$this->ISBN, 'description'=>$this->description, 'tags'=>$this->tags, 'pages'=>$this->pages, 'publishing_house'=>$this->publishing_house, 'user_id'=>auth()->user()->id, ]; if ($this->pdf){ $bookName = $this->pdf->store('/pdfBooks','public'); $book['pdf'] = $bookName; } if ($this->cover) { $book['cover'] = $this->cover->store('/booksCover' ,'public'); } dd($book); return $bookk = Book::create($book);
调试时的$book数组内容
"title" => "booksCover/430rl2fuPEk9fAydBJpCcAho5zkqya80LkfxFP9sv.jpgd" "author" => "4" "genre" => "554ddd" "link" => null "store_link" => null "language" => "الفرنسية" "published_date" => null "ISBN" => "555" "description" => "this is a spam " "tags" => "hello spam" "pages" => "50" "publishing_house" => "Aseer Alkotob" "user_id" => 11 "pdf" => "pdfBooks/SYZjMLjTzaeNk9OgG0m1jtD106seSOjqkhCtRRCn.pdf" "cover" => "booksCover/exg3YvzNrx1Vsb4vV5Qfo2GVZyjwmnlLNC3aagMD.jpg"
解决方案
- 移除
dd($book)语句:代码里的dd($book)会直接终止程序,后面的Book::create($book)根本没机会执行,这是数据没写入数据库的核心原因。删掉或注释这一行,让创建逻辑正常运行。 - 检查
Book模型的可填充字段:打开Book模型,确认$fillable数组包含'pdf'字段,否则Laravel的批量赋值会忽略这个字段:
如果你用的是class Book extends Model { protected $fillable = [ // 其他已存在的字段... 'pdf', 'cover' ]; }$guarded,确保它是空数组或者不包含pdf:protected $guarded = []; - 验证数据库字段配置:确认数据库中
pdf字段是VARCHAR类型,长度足够存储文件路径(建议设为255或更长),避免因长度不足导致写入失败。 - 手动测试创建逻辑:可以临时用硬编码路径测试是否能写入数据库,排除其他问题:
Book::create([ // 填写其他必填字段 'pdf' => 'test/pdf/path.pdf', 'user_id' => auth()->user()->id ]);
内容的提问来源于stack exchange,提问作者OUaana
相关产品推荐
相关产品推荐

