【问题标题】:How to set data type in model before insert to mongodb? (Laravel-mongodb)如何在插入到 mongodb 之前在模型中设置数据类型? (Laravel-mongodb)
【发布时间】:2017-09-01 21:45:47
【问题描述】:

我从这里得到参考:https://github.com/jenssegers/laravel-mongodb

我在 mongodb 中创建数据库和集合。我不在 mongodb 中创建文档和列。因为在插入数据的时候会自动做列和数据类型

我的控制器,你可以在下面看到这个:

public function create(array $attributes)
{
    ...
    $result = User::create($attributes);
    ...
}

我的模型,你可以在下面看到这个:

<?php
...
use Jenssegers\Mongodb\Eloquent\Model as Eloquent; 
use Jenssegers\Mongodb\Eloquent\HybridRelations;

class User extends Eloquent
{
    use HybridRelations;  
    use SoftDeletes;

    protected $connection = 'mongodb';
    public $table = 'users';
    protected $dates = ['deleted_at'];

    public $fillable = [
        ...
        'name',
        ...
    ];

    protected $casts = [
        ...
        'name' => 'string',
        ...
    ];
}

当我向 mongodb 插入数据时,mongodb 上的数据类型将根据输入自动创建

如何在模型中设置数据类型?

当我有一个数据类型的数据输入时:string

我可以在我的模型中将其设置为数据类型:integer

所以,在mongodb中形成的数据类型是integer

【问题讨论】:

    标签: php mongodb laravel laravel-5.3 laravel-eloquent


    【解决方案1】:

    MongoDB 支持两个可以直接嵌入到 MongoDB 文档中的构造函数,允许您指定整数数据类型。在 MongoDB 文档中,您使用以下内容:

    myField: NumberLong("20372")
    

    指定您希望“myField”包含一个 64 位有符号整数。如果你只想要一个 32 位有符号整数,那么你使用:

    myField: NumberInt("20372");
    

    您必须解决的是如何在您的 PHP 脚本中生成该文档文本,然后再将文档文本传递给 MongoDB 驱动程序。另请注意,NumberLong() 和 NumberInt() 构造函数采用 string 值,因此如果您的 PHP 脚本接收数字数据作为字符串,您不必先将这些字符串转换为 PHP 中的数字类型:当您将包含 NumberLong() 和 NumberInt() 构造函数的 MongoDB 文档传递给必要的驱动程序函数/方法时,MongoDB 会为您执行此操作。

    当然,要了解它是如何工作的,最好在开始对主项目进行全面编辑之前设置一个简单的测试,这样当您继续进行上述编辑时,您就可以事先知道要进行哪些更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2023-03-21
      • 2021-01-06
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多