让我们从 Laravel 操作和显示 MongoDB!

好在用 PHP 和 Laravel 准备了功能丰富的驱动,所以实现起来超级简单!我们开始做吧。

样品项目

这次我也会像往常一样分发示例项目。

.env.example文件重命名为.env,输入您的 Mongo 凭据,并将其与php artisan serve一起使用!

示例代码库

但是请阅读全文并理解它是如何工作的,即使你只是“心情不好”......

开发环境

Laravel 是一个活跃的项目,规格可能会因版本而异!

在本文中,我将使用我常用的 Laravel 6.x LTS 系列。

OS -> Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-74-generic x86_64)
Laravel -> Laravel Framework 6.20.32
PHP -> PHP 7.4.3 (cli) (built: Jul 5 2021 15:13:35) ( NTS )
MongoDB -> 4.4.6

进入全屏模式 退出全屏模式

环境设置

首先,通过 Composer 创建 Laravel 项目。

composer create-project laravel/laravel mongodb-sample "6.*"

进入全屏模式 退出全屏模式

使 MongoDB 可用

使用 Pecl 为 PHP 安装 MongoDB 驱动程序。

(Pecl 在安装时随 PHP 一起提供。)

pecl install mongodb

进入全屏模式 退出全屏模式

并通过 Composer 引入了一个库,允许在 Laravel 项目中使用查询构建器等。

Composer require jenssegers/mongodb

进入全屏模式 退出全屏模式

[笔记]

要包含哪个包版本取决于您的 Laravel 版本!

你可以在下面的 GitHub 上找到它。 对于 Laravel 6.x 系列,请使用 3.6.x!

官方文档

[LaraMongo](https://res.cloudinary.com/practicaldev/image/fetch/s--Gn53MpTp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/a19khlzr7pk88jtcmxwa.png)

制作样本数据库

作为初步步骤,我们将创建一个样本集合。

直接在 mongo shell 中输入以下内容,将创建一个名为 Post 的集合。

use <DB Name>
db.post.insertOne({"body": "Orange","date": "2021-08-19"});
db.post.insertOne({"body": "Grape","date": "2021-08-22"});
db.post.insertOne({"body": "Apple","date": "2021-08-17"});

进入全屏模式 退出全屏模式

※使用 MongoDB Compass(图形用户界面的 CRUD 软件)时,只需读取以下 JSON 即可创建。

JSON 文件

用 Laravel 实现!

编辑配置

编辑/添加到 Config 目录中的以下内容。

/config/app.php(编辑)

<?php
// ~Omitted~
    'providers' => [

// Add the following to End.
        Jenssegers\Mongodb\MongodbServiceProvider::class,
// ~Omitted~
    'aliases' => [
// Add the following to End.
        'Moloquent' => Jenssegers\Mongodb\Eloquent\Model::class,

进入全屏模式 退出全屏模式

/config/database.php(编辑)

<?php
//  'default' => env('DB_CONNECTION', 'mysql'),
    'default' => env('DB_CONNECTION', 'mongodb'),

    'connections' => [
// Added immediately after.
        'mongodb' => [
            'driver' => 'mongodb',
            'host' => env('DB_HOST'),
            'port' => env('DB_PORT'),
            'database' => env('DB_DATABASE'),
            // If you have login restrictions, you also need the following.
       'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
        ],

进入全屏模式 退出全屏模式

.env中的凭证

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=xxxx
DB_USERNAME=xxxx
DB_PASSWORD=secret
# Delete the above and replace with the below, and enter the information as appropriate.
DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=xxxx

进入全屏模式 退出全屏模式

制造型号

接下来,我们将创建模型,在 MVC 中为“M”。

这很方便,因为我们可以为每个集合单独使用它们!

php artisan make:model Models/Post

进入全屏模式 退出全屏模式

这将在/app/Models中自动创建一个模型,因此请复制并粘贴以下所有内容并替换它。

/app/Models/Post.php(新)

<?php
namespace App\Models;
use Jenssegers\Mongodb\Eloquent\Model as Moloquent;

class Post extends Moloquent
{
    protected $collection = 'post';
}

进入全屏模式 退出全屏模式

创建路由

routes/web.php(编辑)

<?php
Route::get('/', 'TestController@index');

进入全屏模式 退出全屏模式

// ↑ 当你访问/时,它会引用TestController。

创建控制器

嗯,这就是重点。使用以下工匠命令创建控制器。

php artisan make:controller TestController

进入全屏模式 退出全屏模式

然后复制并粘贴以下所有内容。

/app/Http/Controllers/TestController.php(新)

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post;

class TestController extends Controller
{
    static function index() {
        $posts = Post::orderBy('_id', 'desc')->get();
        return view('Test', ['posts' => $posts]);
    }
}

进入全屏模式 退出全屏模式

创建视图

最后,创建一个视图,你就完成了!

我使用了 Blade。它是从 Controller 接收变量并将其显示在foreach中的那个。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>MongoDB Show</title>
</head>
<body>
    <div>Data Count:{{ count($posts) }}</div><br>
    <!-- You can use the count() function to output the number of data in the collection. -->
    <ul>
        @foreach ($posts as $post)
            <li>{{ 'Date:' . $post['date'] . ' | Value:' . $post['body'] }}</li>
        @endforeach
    </ul>
</body>
</html>

进入全屏模式 退出全屏模式

就这样!

操作检查

php artisan serve启动内置服务器,访问http://localhost:8000/,如果能看到没有问题,就成功了!

[操作](https://res.cloudinary.com/practicaldev/image/fetch/s--EDaVTKcz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads .s3.amazonaws.com/uploads/articles/tvd361joctnij98buevr.png)

我也会将它发布在 GitHub 上的 repo 上。请试一试。 (GitHub 只推送 laravel diff 目录/文件)

https://github.com/ichii731/php-examples/tree/main/laravel_mongodb-show

如果您喜欢,请查看博客和 Twitter@ichii731:D

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐