Laravel/Mundb-DB::Collection()不起作用

uxhixvfz  于 2022-10-22  发布在  Go
关注(0)|答案(1)|浏览(113)

我正在关注这个Laravel/MongoDB包:https://github.com/jenssegers/。在这里,如果您转到这一部分的https://github.com/jenssegers/laravel-mongodb#basic-usage-2,您可以看到他们正在使用DB::collection()方法,并将集合名称传递给该方法。
现在,在我的控制器中,我正尝试这样做:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Import;
use App\Models\Projects;
use Jenssegers\Mongodb\Collection;
use Jenssegers\Mongodb\Query\Builder;

class ImportController extends Controller
{   

    public function get_all_products() {

        // Predefined key
        $predefined_keys = [ 'image_link', 'title', 'price', 'brand', 'link' ];

        // Get all the products
        //$get_products = Import::paginate(10);

        $get_products = DB::collection('products_1')->get();

        return response()->json($get_products, 200);    
    }
}

但我没有得到任何结果。你能告诉我我错过了什么吗?

我的目标是直接在这个控制器中设置集合名称,而不是在Model中。
更新:
我的导入模式如下:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Jenssegers\Mongodb\Eloquent\Model;

class Import extends Model
{
    protected $connection = 'mongodb';
    protected $collection = 'products_46';

    // protected $table = 'projects';

}
atmip9wb

atmip9wb1#

您配置此项目的方式有问题。
从您链接的文档中:
在使用MongoDB连接时,Laravel会自动为您提供相应的MongoDB对象。
然而,在您报告的评论中,DB::collection('products_1')->get();导致:

message": "Method Illuminate\\Database\\MySqlConnection::collection does not exist."

此错误消息引用的是MySQL,而不是MongoDB。根据this question,您似乎正在将MySQL用于应用程序的其他部分。
在任何情况下,我认为答案都是确保适当地加载包(如果DBIlluminate\Support\Facades中单独定义并且在这部分代码的范围内,还可以消除名称空间之间的歧义)。

相关问题