升级库版本
Overview
在此页面上,您可以学习;了解如何将 Laravel MongoDB升级到新的主要版本。 此页面还包括您必须对应用程序进行的更改,以升级Laravel 集成版本而不丢失功能(如果适用)。
如何升级
升级前,请执行以下操作:
确保新的库版本与应用程序连接到的MongoDB Server版本以及应用程序运行所在的 Laravel 版本兼容。 有关此信息,请参阅兼容性页面。
在本指南的“重大更改”部分中,解决应用程序现在使用的Laravel集成版本与计划升级版本之间的任何重大更改。
要升级库版本,请在应用程序目录中运行以下命令:
composer require mongodb/laravel-mongodb:5.1
要升级到该库的其他版本,请将laravel-mongodb:
后面的信息替换为您的首选版本号。
重大更改
破坏性变更 (breaking change)是对特定版本的 Laravel 集成中的约定或行为的修改,可能会阻止您的应用程序按预期工作。
本节中的重大更改按引入它们的主要版本进行分类。 升级库版本时,请解决当前版本和计划升级版本之间的所有重大更改。
5.x 版重大更改
此库版本引入了以下重大更改:
查询构建器将结果作为
stdClass
对象而不是数组返回。此更改要求您在与查询结果交互时将大量访问权限更改为属性访问权限。以下代码展示了如何在旧版本(与 v 5.0相比)中检索查询结果并从结果对象访问权限属性:
$document = DB::table('accounts') ->where('name', 'Anita Charles') ->first(); // older versions $document['balance']; // v5.0 $document->balance; 删除对以下类的支持:
MongoDB\Laravel\Auth\DatabaseTokenRepository
。 相反,请使用默认的Illuminate\Queue\Failed\DatabaseFailedJobProvider
类并指定与MongoDB的连接。MongoDB\Laravel\Queue\Failed\MongoFailedJobProvider
。 相反,请使用默认的Illuminate\Queue\Failed\DatabaseFailedJobProvider
类并指定与MongoDB的连接。
在查询中使用
DateTimeInterface
对象(包括Carbon
)时,该库会将DateTimeInterface
转换为MongoDB\BSON\UTCDateTime
对象。 此转换适用于作为查询筛选器传递给where()
方法的DateTimeInterface
对象,或作为数据传递给insert()
和update()
方法的 对象。要查看将
Carbon
对象传递给DB::where()
方法的示例,请参阅 查询生成器指南的匹配日期示例部分。在查询结果中,该库将BSON
UTCDateTime
对象转换为Carbon
日期类,并应用默认时区。在 v 5.1 中,在水合模型实例之前,该库还会对
Model::raw()
方法结果执行此转换。id
是MongoDB文档中_id
字段的别名,该库在查询数据时会自动在id
和_id
之间进行转换。 查询结果对象包括一个id
字段来表示文档的_id
字段。 由于这种行为,您的文档中不能有两个单独的id
和_id
字段。在 v 5.1 中,在水合模型实例之前,该库还会对
Model::raw()
方法结果执行此转换。传递复杂查询过滤时,请使用DB::where()
方法而不是Model::raw()
。删除支持
$collection
属性的支持。 以下代码展示了如何在旧版本(与 v 5.0相比)中将MongoDB集合分配给User
类中的变量:use MongoDB\Laravel\Eloquent\Model; class User extends Model { protected $keyType = 'string'; // older versions protected $collection = 'app_user'; // v5.0 protected $table = 'app_user'; ... } 此发布还修改了用于访问MongoDB集合的相关
DB
和Schema
方法。 以下代码展示了如何在旧版本与 v 5.0中访问权限app_user
集合:use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\DB; use MongoDB\Laravel\Schema\Blueprint; // older versions Schema::collection('app_user', function (Blueprint $collection) { ... }); DB::collection('app_user')->find($id); // v5.0 Schema::table('app_user', function (Blueprint $table) { ... }); DB::table('app_user')->find($id);
版本 4.x 重大更改
此库版本引入了以下重大更改:
最低 Laravel 版本现在为10.0 。 有关升级 Laravel 版本的说明,请参阅 升级指南 在 Laravel 文档中。
依赖名称现在为
"mongodb/laravel-mongodb"
。 确保composer.json
文件中的依赖项名称为"mongodb/laravel-mongodb": "^4.0"
。 然后运行composer update
。命名空间现在为
MongoDB\Laravel\
。 确保在模型和配置文件中将命名空间从Jenssegers\Mongodb\
更改为MongoDB\Laravel\
。删除了对非 Laravel 项目的支持。
删除对
$dates
属性的支持。 确保将模型文件中$dates
的所有实例更改为$casts
。Model::unset($field)
不会保留更改。 确保对Model::unset($field)
的所有调用都使用Model::save()
进行跟踪。删除
Query\Builder::whereAll($column, $values)
方法。 确保将对Query\Builder::whereAll($column, $values)
的所有调用替换为Query\Builder::where($column, 'all', $values)
。Query\Builder::delete()
可以删除一个或所有文档。 确保仅将值1
或null
传递给limit()
。whereDate()
、whereDay()
、whereMonth()
、whereYear()
和whereTime()
方法现在对日期字段使用MongoDB操作符。添加
MongoDB\Laravel\Eloquent\MassPrunable
特征。 确保将模型中Illuminate\Database\Eloquent\MassPrunable
的所有实例替换为MongoDB\Laravel\Eloquent\MassPrunable
。删除对以下
Query\Builder
方法的支持:toSql()
toRawSql()
whereColumn()
whereFullText()
groupByRaw()
orderByRaw()
unionAll()
union()
having()
havingRaw()
havingBetween()
whereIntegerInRaw()
orWhereIntegerInRaw()
whereIntegerNotInRaw()
orWhereIntegerNotInRaw()