Laravel8 使用mongo数据库

本文详细介绍了如何在Laravel8中配置并使用MongoDB数据库,包括安装mongodb扩展,定义模型,创建service层,控制器操作以及设置路由。目前仅部分功能被测试,欢迎读者在评论区分享更多经验。
摘要由CSDN通过智能技术生成

安装

1. 确保电脑上装好mongo数据库

本篇文章使用的是version 4.0.27, 安装步骤此处不再赘述

2. 执行 composer require jenssegers/mongodb 安装拓展

3. 定义模型数据库

下面定义一些测试模型

<?php

namespace App\Models;

use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\Factories\HasFactory;

// 如果使用DB查询, 那么就继承这个类, 但是不是很好用, 排序方法不好用
//use Moloquent;

// 下面这个类不支持laravel7 支持6 8 9
use Jenssegers\Mongodb\Eloquent\Model;

class Address extends Model
{
   
    use HasFactory, HasDateTimeFormatter;

    protected $connection = 'mongodb';
    protected $table      = 'address';

    /***
     * 白名单
     * @var string[]
     */
    protected $fillable = ['number', 'name', 'address','phone'];
    /**
     * @var string
     */
    protected $primaryKey = '_id';    //设置id

    /**
     * 指定是否模型应该被戳记时间。
     *
     * @var bool
     */
    public $timestamps = false;

    protected $dates = ['ctime'];

    public function users()
    {
   
        return $this->belongsTo(Users::class,'user_id');
    }

    public function getAttribute($key)
    {
   
        return parent::getAttribute($key); // TODO: Change the autogenerated stub
    }
}

4. 定义service层

<?php

namespace App\Services;

use App\Models\Address;
use Illuminate\Support\Facades\DB;
use Think\Exception;

class AddressService
{
   
    public $db;
    public $_addressModel;

    public function __construct(Address $_addressModel)
    {
   
        $this->db = DB::connection('mongodb');
        $this->_addressModel = $_addressModel;
    }

    /**
     * 列表
     * @param  int     $limit
     * @param  int     $skip
     * @param  array   $field       按照最后一个字段排序
     * @param  array   $where       where条件
     * @param  int     $options     0 升序 | -1 降序
     * @param  bool    $descending  默认false | true 降序
     * @return array
     */
    public function list($whereIn, $where, $field, $options, $descending, int $page = 1, int $pagesize = 20)
    {
   
        // 分组查询
        $group = '';

         $page = $page <= 0 ? 1 : $page;
        //限制一页获取最大条数
        if ($pagesize <= 0 or $pagesize > 14) {
   
            $pagesize = 14;
        }

        //计算总页数
        $total     = $this->_addressModel->count();
        $totalPage = ceil($total / $pagesize);

        if ($where) {
   
            if ($where['number'] && isset($where['number'])) {
   
                $this->_addressModel = $this->_addressModel->where('number',$where['number'][0],$where['number'][1]);
            }

            if ($where['ctime'] && isset($where['ctime'])) {
   
                $this->_addressModel = $this->_addressModel->where('ctime',$where['ctime'][0],$where['ctime'][1]);
            }
            if ($where['address'] && isset($where['address'])) {
   
                $this->_addressModel = $this->_addressModel->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值