php - 如何在 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 填充到集合中?我想将它保存在关系数据库中以便以后检索。谢谢!
解决方案
Laravel 不支持 mongodb 等 noSql 数据库。
您需要对特定数据库使用 PHP 方法,或者您可以使用此 ORM 包:https ://github.com/jenssegers/laravel-mongodb
这个包将启用与 RDBMS 相同的所有 ORM 功能。
推荐阅读
- python - 如何在列表推导中向 dict 添加元素?
- python - Setting specific values to 0 in a NumPy array
- javascript - Why can't I assign a function to Object.prototype.click?
- macros - Macros do not allow definition of lexical variables
- wait - 显式等待使用 winappdriver 自动化 Windows 应用程序
- android - 使用 windowTranslucentNavigation 和透明 navigationBarColor 将“带状”渐变放在导航栏后面
- docker - Docker volume and host permissions
- lets-encrypt - Traefik 可以使用 HTTPS 保护多少个域,有上限吗?
- xamarin - 如何在 iOS 上的键盘类型电子邮件上插入按钮“.com”?
- javascript - 尝试从 vuejs 组件打印时样式参数不适用于 print-js