如何在拉拉维尔中插入任意 JSON 响应到君戈布集合?



我通过以下方式描述了这个模型:

<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
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'), 
],
],

但是当我尝试执行第二段代码时,我收到此错误:

SymfonyComponentDebugExceptionFatalThrowableError:
Argument 1 passed to IlluminateDatabaseGrammar::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?我想将其保存在关系数据库中,以便以后检索。谢谢!

> Laravel不支持noSql数据库,如mongodb和其他数据库。

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

该软件包将启用与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'), 
],
],

用静态值替换它解决了这个问题:

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

最新更新