如何从laravel route post将数据保存到mysql数据库中

Posted

技术标签:

【中文标题】如何从laravel route post将数据保存到mysql数据库中【英文标题】:How to save data into mysql database from laravel route post 【发布时间】:2021-08-23 22:29:37 【问题描述】:

我有 web.php 文件

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Http\Request;
Route::get('/', function () 
    return view('welcome');
);

Route::post('/upload', function (Request $request) 
    $name=$request->file("thing")->getClientOriginalName();
    Storage::disk("google")->putFileAs("",$request->file("thing"),$name);
)->name("upload");
?>

html 代码类似

<!DOCTYPE html>
<html lang=" str_replace('_', '-', app()->getLocale()) ">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Google drive integration in laravel</title>
    <!-- CSS only -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
    </head>
    <body>
        <div class="container">
            <div class="row">
                <div class="col-12">
    
                <br><br><br>
                    <form action="/upload" method="post" enctype="multipart/form-data">
                    @csrf
                    
                    <input type="file" class="form-control" name="thing" id="title">
                    <p id="s"></p>
                    <br>
                    <input type="submit" class="btn btn-sm btn-block btn-danger" value="Upload">
                    </form>
                </div>
            </div>
        </div>
    </body>
</html>

我希望将Route::post 的$name 变量中接收到的数据保存在数据库中。 就像我的 mysql 数据库名称“registration”有表“books”,我想将此值保存在“URL”列中 我该怎么做?

【问题讨论】:

【参考方案1】:

先移动文件,然后保存记录:

Route::post('/upload', function (Request $request, Table $table) 
    $name=$request->file("thing")->getClientOriginalName();
    $request->file->move('dirname', $name);
    $table->column_name = "dirname/$name";
    $table->save();
)->name("upload");

【讨论】:

【参考方案2】:

首先检查数据库表是否存在

Schema::connection('mysql')->hasTable('books')

如果存在则返回true,否则返回false

用于插入数据库

  DB::table('books')->insert(['URL'=>$name])

最终代码将是

$tableExist=Schema::connection('mysql')->hasTable('books');
if($tableExist)
 DB::table('books')->insert(['URL'=>$name]);

您也可以使用连接进行查询插入

  DB::connection('mysql')->table('users')->insert(['URL'=>$name]);

如果您使用默认连接,则也不需要连接方法。

对于进口

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

【讨论】:

【参考方案3】:

首先您需要编辑您的.env 文件。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=registration
DB_USERNAME=root
DB_PASSWORD=secretPassword

插入您的数据会这样工作

首先你需要导入数据库类 use Illuminate\Support\Facades\DB;

然后执行插入语句

DB::insert('insert into books (URL) values (?)', [$name]);

您的表格中可能有不止一列

DB::insert('insert into books (URL, AnotherColumn) values (?,?)', [$name,'anotherValue']);

来源laravel-docs

【讨论】:

我现在说不出有多感激。 还有一件事,我的整个项目都在 xampp 中,我正在制作和运行 PHP 文件,现在我希望当用户单击按钮时我的 laravel 项目打开,我想要这个使用 localhost/.. 路径在 xampp 上工作,而无需使用工匠服务器。我该怎么做? 我在这篇文章中尝试了几件事***.com/questions/28788285/…,它打开了项目,但是当我点击上传按钮时,它不起作用,路径 localhost/uploads 不存在 这超出了我的认知 避免100%做DB::insert('.....'),使用模型或者至少DB::table('books')-&gt;.......尽量避免使用DB类...

以上是关于如何从laravel route post将数据保存到mysql数据库中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:使用 POST 请求将数据发送到控制器方法

Laravel 将 Json 发送到控制器

如何在laravel 5.5中使用令牌从JWTAuth获取用户

如何在 Laravel 中使用 get route 插入数据发布

如何通过laravel中的控制器将数据保存在数据库中

如何将可选 ID 从 Route 传递给 Laravel 控制器?