簡體   English   中英

如何在 Laravel 中插入對 mongodb 集合的任意 JSON 響應?

[英]How to insert arbitrary JSON response to mongodb collection in Laravel?

我已經通過以下方式描述了 model:

<?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| 

我到底做錯了什么? 如何以更正確的方式在集合中填充 JSON 並獲取文檔 ID? 我想將它保存在關系數據庫中以便以后檢索。 謝謝!

Laravel 不支持 noSql 數據庫,如 mongodb 等。

You need to use PHP methods for the specific database or you can use this ORM package: https://github.com/jenssegers/laravel-mongodb

此 package 將啟用與 RDBMS 相同的所有 ORM 功能。

答案是 MongoDB 配置試圖從 .env 文件中的 MySQL 設置中獲取 Mongo 身份驗證的憑據:

'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'), 
    ],
],

用 static 值替換它已解決問題:

'mongodb' => [
    'driver' => 'mongodb',
    'host' => '127.0.0.1',
    'port' =>  27017,
    'database' =>  'feeds',
    'username' => 'user',
    'password' => 'test',
    'options' => [
        'database' => env('DB_AUTHENTICATION_DATABASE', 'axonite'), 
    ],
],

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM