zizaco / mongolid-laravel

该包已被弃用且不再维护。作者建议使用 leroy-merlin-br/mongolid-laravel 包。

为 Laravel 提供简单、强大且超快的 MongoDB ODM。

v3.7.0 2023-10-23 15:07 UTC

README

Build Status Coverage Status Latest Stable Version Monthly Downloads Latest Unstable Version License

MongoLid

MongoLid (Laravel 包)

简介

MongoLid ODM (对象文档映射器) 提供了与 MongoDB 交互的优雅、简单实现。每个数据库集合都可以有一个相应的 "模型",用于与该集合交互。

注意:ODM 实现位于 (非 Laravel) mongolid 仓库 内。

安装

使用 composer require 安装(如果需要,请使用上面的标签)。

composer require leroy-merlin-br/mongolid-laravel

注意: Mongolid Laravel 2.0 仅支持 Laravel 5.4 及以上版本。对于旧版本,请使用以下标签:

  • Laravel 4.2 "leroy-merlin-br/mongolid-laravel": "^0.7"
  • Laravel 5.1 "leroy-merlin-br/mongolid-laravel": "2.0.0-beta4"
  • Laravel 5.2 "leroy-merlin-br/mongolid-laravel": "2.0.0-beta6"
  • Laravel 5.3 "leroy-merlin-br/mongolid-laravel": "2.0.0-beta6"

使用 beta 标签时,请确保将最小稳定性设置为 devcomposer config minimum-stability dev)。

注意:如果您使用 Laravel 5.5,则无需执行提供者和别名步骤。MongoLid 支持 Laravel 新的 包发现

在您的 config/app.php 中,将 'MongolidLaravel\MongolidServiceProvider' 添加到 $providers 数组的末尾

'providers' => [
    Illuminate\Translation\TranslationServiceProvider::class,
    Illuminate\Validation\ValidationServiceProvider::class,
    Illuminate\View\ViewServiceProvider::class,
    ...
    MongolidLaravel\MongolidServiceProvider::class,
],

(可选) 在 config/app.php 的末尾添加 'MongoLid' => 'MongolidLaravel\MongoLidModel'$aliases 数组

'aliases' => [
    'App'         => Illuminate\Support\Facades\App::class,
    'Artisan'     => Illuminate\Support\Facades\Artisan::class,
    ...
    'MongoLid'    => MongolidLaravel\MongoLidModel::class,
],

最后,请确保在 config/database.php 中配置数据库连接

在您的 config/database.php 的末尾粘贴以下设置,在最后一个 ]; 之前

注意:它必须位于 connections 数组之外。

/*
|--------------------------------------------------------------------------
| MongoDB Databases
|--------------------------------------------------------------------------
|
| MongoDB is a document database with the scalability and flexibility
| that you want with the querying and indexing that you need.
| Mongolid Laravel use this config to starting querying right now.
|
*/

'mongodb' => [
    'default' => [
        'host'     => env('DB_HOST', '127.0.0.1'),
        'port'     => env('DB_PORT_NUMBER', 27017),
        'database' => env('DB_DATABASE', 'my_database'),
        'username' => env('DB_USERNAME', null),
        'password' => env('DB_PASSWORD', null),
    ],
],

对于具有自动故障转移的集群,您需要设置包含所有 nodes 以及 replica_set 名称的 cluster 键。

'mongodb' => [
    'default' => [
        'cluster' => [
            'replica_set' => env('DB_REPLICA_SET', null),
            'nodes' => [
                'primary' => [
                    'host' => env('DB_HOST_A', 'host-a'),
                    'port' => env('DB_PORT_A', 27017),
                ],
                'secondary' => [
                    'host' => env('DB_HOST_B', 'host-b'),
                    'port' => env('DB_PORT_B', 27017),
                ],
            ],
        ],
        'database' => env('DB_DATABASE', 'mongolid'),
        'username' => env('DB_USERNAME', null),
        'password' => env('DB_PASSWORD', null),
    ],
],

您可以配置所需数量的节点,节点名称(例如 primarysecondary)是可选的。

注意:如果您在 config/database.php 中未指定 mongodb 键,MongoLid 将自动尝试连接到 '127.0.0.1:27017' 并使用名为 'mongolid' 的数据库。

您可以可选地提供 connection_string 键来设置一个完全组装的连接字符串,这将覆盖所有其他连接选项。有关连接字符串的更多信息,请参阅 MongoDB 文档

'mongodb' => [
    'default' => [
        'connection_string' => 'mongodb://host-a:27017,host-b:27917/mongolid?replicaSet=rs-ds123',
    ],
],

此外,您还可以将 optionsdriver_options 传递给 MongoDB 客户端。Mongolid 总是覆盖 driver_optionstypeMap 配置为 array,因为它使内部使用模型更简单。可能的 optionsdriver_optionsMongoDB\Client 文档 中。

基本用法

要开始使用,创建一个 MongoLid 模型。模型通常位于 app/models 目录中,但您可以将它们放在任何根据您的 composer.json 文件可以自动加载的位置。

定义 MongoLid 模型

<?php
namespace App;

use MongolidLaravel\MongolidModel;

class User extends MongolidModel
{

}

总之,就是这样!

要了解有关模型、CRUD操作、关系等更多内容,请参阅Read the Docs: leroy-merlin-br.github.com/mongolid

Mongolid Docs

身份验证

MongoLid Laravel附带了Laravel认证提供者。要使用它,只需将config/auth.php中的'driver'提供者值更改为mongolid,并确保在model中指定的类是一个实现了Authenticatable契约的MongoLid模型。

    'providers' => [

        // ...

        'users' => [
            'driver' => 'mongolid',
            'model' => \App\User::class
        ],

        // ...

    ],

User模型应该实现Authenticatable接口。

<?php
namespace App;

use Illuminate\Contracts\Auth\Authenticatable;
use MongolidLaravel\MongolidModel;

class User extends MongolidModel implements Authenticatable
{
    /**
     * The database collection used by the model.
     *
     * @var string
     */
    protected $collection = 'users';

    /**
     * Get the name of the unique identifier for the user.
     *
     * @return string
     */
    public function getAuthIdentifierName()
    {
        return '_id';
    }

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->_id;
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password;
    }

    /**
     * Get the token value for the "remember me" session.
     *
     * @return string
     */
    public function getRememberToken()
    {
        return $this->remember_token;
    }


    /**
     * Set the token value for the "remember me" session.
     *
     * @param  string  $value
     */
    public function setRememberToken($value)
    {
        $this->remember_token = $value;
    }

    /**
     * Get the column name for the "remember me" token.
     *
     * @return string
     */
    public function getRememberTokenName()
    {
        return 'remember_token';
    }
}

现在,要登录用户到您的应用程序,您可以使用auth()->attempt()方法。您可以使用有关认证的任何方法

队列失败作业提供者

Mongolid Laravel将Laravel队列失败作业提供者替换为使用集合而不是表。要配置提供者,请更新queue.php中的failed键,以包含collection名称。

    'failed' => [
        'database' => 'mongodb',
        'collection' => 'failed_jobs',
    ],

注意: database键是无关紧要的。

故障排除

"PHP致命错误:类'MongoDB\Client'在...找不到..."

MongoDB\Client类包含在MongoDB PHP库中,它需要MongoDB PHP驱动程序。以下是此驱动程序的安装指南。该驱动程序是用C编写的PHP扩展,由MongoDB维护。MongoLid和大多数其他MongoDB PHP库都利用它以实现快速和可靠。

即使在安装了MongoDB驱动程序后,CLI环境中也持续出现"Class 'MongoDB\Client' not found in ..."

请确保CLI环境中使用的php.ini文件包含MongoDB扩展。在某些系统中,默认PHP安装为Web和CLI环境使用不同的.ini文件。

在终端中运行php --ini以检查正在使用的.ini文件。

要检查CLI环境中的PHP是否正确导入驱动程序,请在您的终端中运行php -i | grep mongo。您应该得到类似的输出

$ php -i | grep mongo
mongodb
mongodb support => enabled
...

"此包需要php >=7.0,但您的PHP版本(X.X.X)不满足此要求。"

Mongolid Laravel的新版(和改进版)2.0需要php7。如果您正在寻找旧的PHP 5.x版本或其他Laravel版本,请转到v0.8分支

许可协议

MongoLid和MongoLid Laravel是免费软件,根据MIT许可证的条款分发。部分代码基于Taylor Otwell和laravel/framework上的工作,该框架也是根据MIT许可证分发的免费软件。

更多信息

Mongolid由Leroy Merlin Brazil团队自豪地构建。查看所有贡献者

如有任何问题,请随时联系我们。

如有任何问题,请在此处报告