首页 > 解决方案 > 如何在 Laravel 中向 mongodb 集合插入任意 JSON 响应?

问题描述

我用以下方式描述了模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Feed extends Model
{
    protected $collection = 'feeds';
    protected $connection = 'mongodb';
    protected $appends = ['id'];
    protected $hidden = ['_id'];
    protected $fillable = ['feed_content'];
    public $timestamps = true;
}

我想将 API 响应的内容保存在数据库日志中:

    $feed_info = $driver->getAdvertiserFeed();
    $feed_id = new Feed;
    $feed_id->feed_content = $feed_info;
    $feed_id->save();

与 MongoDB 的连接是这样配置的:

    'mongodb' => [
        'driver' => 'mongodb',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', 27017),
        'database' => env('DB_DATABASE', 'feeds'),
        'username' => env('DB_USERNAME', 'user'),
        'password' => env('DB_PASSWORD', 'test'),
        'options' => [
            'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'), 
        ],
    ],

但是当我尝试执行第二段代码时,我得到了这个错误:

Symfony\Component\Debug\Exception\FatalThrowableError:
Argument 1 passed to Illuminate\Database\Grammar::parameterize()
must be of the type array, string given, called in
/home/pavel/Projects/axonite/vendor/laravel/framework/
  src/Illuminate/Database/Query/Grammars/Grammar.php on line 853

at /home/pavel/Projects/axonite/vendor/laravel/framework/src/Illuminate/Database/Grammar.php:138
    134|      *
    135|      * @param  array   $values
    136|      * @return string
    137|      */
  > 138|     public function parameterize(array $values)
    139|     {
    140|         return implode(', ', array_map([$this, 'parameter'], $values));
    141|     }
    142| 

我到底做错了什么?如何通过取回文档 ID 以更正确的方式将 JSON 填充到集合中?我想将它保存在关系数据库中以便以后检索。谢谢!

标签: phpjsonlaravelmongodbbson

解决方案


Laravel 不支持 mongodb 等 noSql 数据库。

您需要对特定数据库使用 PHP 方法,或者您可以使用此 ORM 包:https ://github.com/jenssegers/laravel-mongodb

这个包将启用与 RDBMS 相同的所有 ORM 功能。


推荐阅读