存储函数 laravel 8 不将数据保存到数据库
store function laravel 8 not saving data to the database
提前感谢您花时间阅读抛出的问题。
所以我在 blade 视图中有一个表单,用户可以在其中添加名称、描述并上传图像,但数据不会传递到数据库
blade 视图:
<div class="container">
<form action="/list">
<div class="form-group">
<label for="Name">Name:</label>
<input type="Name" class="form-control" id="Name" placeholder="Enter Name" name="Name">
</div>
<div class="form-group">
<label for="description">description:</label>
<input type="description" class="form-control" id="description" placeholder="Enter description" name="description">
</div>
<p>image:</p>
<div class="custom-file mb-3">
<input type="file" class="custom-file-input" id="image" name="image">
<label class="custom-file-label" for="image">Choose file</label>
</div>
<div class="mt-3">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
<script>
$(".custom-file-input").on("change", function() {
var image = $(this).val().split("\").pop();
$(this).siblings(".custom-file-label").addClass("selected").html(image);
});
</script>
控制器中的存储功能:
<?php
namespace App\Http\Controllers;
use App\Models\Realestate;
use Illuminate\Http\Request;
class RealestatesController extends Controller
{
//
function store(Request $request){
$realestate =new Realestate();
$realestate->name= $request->name;
$realestate->description= $request->description;
$name=$request->file('image')->getClientOriginalName();
$request->file('image')->storeAs('public/storage',$name);
$realestate->image=$name;
$realestate->save();
return redirect('/list');
}
}
我用过的迁移:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Realestates extends Migration
{
public function up()
{
Schema::create('realestates', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->string('image');
$table->timestamps();
});
}
}
最后我使用的路线是:
Route::post('/list',[RealestatesController::class, 'store']);
我是否遗漏了前面提到的代码中的任何内容?
您的表格中遗漏了 2 件事:
method='POST'
-- 这告诉表单实际提交表单作为 POST 请求和 not a GET request
@csrf
-- 所有Laravel表单都必须有一个CSRF令牌才能被接受,除非在中间件中明确绕过或通过GET提交,例如搜索表单
编辑
同样对于文件上传,您需要在表单中添加 enctype="multipart/form-data"
。
提前感谢您花时间阅读抛出的问题。
所以我在 blade 视图中有一个表单,用户可以在其中添加名称、描述并上传图像,但数据不会传递到数据库
blade 视图:
<div class="container">
<form action="/list">
<div class="form-group">
<label for="Name">Name:</label>
<input type="Name" class="form-control" id="Name" placeholder="Enter Name" name="Name">
</div>
<div class="form-group">
<label for="description">description:</label>
<input type="description" class="form-control" id="description" placeholder="Enter description" name="description">
</div>
<p>image:</p>
<div class="custom-file mb-3">
<input type="file" class="custom-file-input" id="image" name="image">
<label class="custom-file-label" for="image">Choose file</label>
</div>
<div class="mt-3">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
<script>
$(".custom-file-input").on("change", function() {
var image = $(this).val().split("\").pop();
$(this).siblings(".custom-file-label").addClass("selected").html(image);
});
</script>
控制器中的存储功能:
<?php
namespace App\Http\Controllers;
use App\Models\Realestate;
use Illuminate\Http\Request;
class RealestatesController extends Controller
{
//
function store(Request $request){
$realestate =new Realestate();
$realestate->name= $request->name;
$realestate->description= $request->description;
$name=$request->file('image')->getClientOriginalName();
$request->file('image')->storeAs('public/storage',$name);
$realestate->image=$name;
$realestate->save();
return redirect('/list');
}
}
我用过的迁移:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class Realestates extends Migration
{
public function up()
{
Schema::create('realestates', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->string('image');
$table->timestamps();
});
}
}
最后我使用的路线是:
Route::post('/list',[RealestatesController::class, 'store']);
我是否遗漏了前面提到的代码中的任何内容?
您的表格中遗漏了 2 件事:
method='POST'
-- 这告诉表单实际提交表单作为 POST 请求和 not a GET request
@csrf
-- 所有Laravel表单都必须有一个CSRF令牌才能被接受,除非在中间件中明确绕过或通过GET提交,例如搜索表单
编辑
同样对于文件上传,您需要在表单中添加 enctype="multipart/form-data"
。