问题标签 [vapor-fluent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swift - MySQL & Vapor 3:无法识别的基本数据包,不支持完整身份验证
我想将我机器上的 MySQL 数据库与 Vapor 3 应用程序连接起来。
我当前的configure.swift
文件如下所示:
这工作得很好。但是,由于我需要将我的模型添加到迁移配置中,我还需要添加:
这次运行应用程序时,我看到一条错误消息:
不安全的连接不支持完全身份验证。
经过一番研究,似乎可以通过将密码逻辑从更改为来克服此caching_sha2_password
错误mysql_native_password
。
但是,这给我留下了错误消息:
无法识别的基本数据包。
我该如何解决?
swift - Vapor 3:使用 wait() 时检测到 Eventloop 错误
我正在努力理解如何批量保存获取的对象并将它们存储到数据库中。将对象存储到数据库后,我想返回查询结果。我无法理解如何使用 EventLoopFuture 执行此操作,因为当我打电话时.wait()
收到错误消息:
前提条件失败:检测到错误:在 EventLoop 上时不得调用 wait()。
作为我的问题的一个例子:
- 我需要从外部端点获取一个实体(比如说机场的航班)
- 该调用的结果需要保存到数据库中。如果航班存在于数据库中,则需要更新,否则创建。
- 完成后,需要返回数据库中所有航班的列表。
这是我到目前为止得到的,但这给了我一个错误:
所以问题就在网上_ = try? self.storeOrUpdateFlightRecord(flight, airport: airport, on: conn).wait()
。我不能打电话wait()
,因为它会阻止 eventLoop,但是如果我打电话map
或者flatMap
我需要反过来返回一个EventLoopFuture<U>
( U
being Flight
),我对此完全不感兴趣。
我想self.storeOrUpdateFlightRecord
被叫到结果被忽略。我怎样才能做到这一点?
mysql - Vapor 3 Fluent MySQL: save on model adds 10 to auto_increment
When I am saving my object to the database, it stores the id of the object with +10. The autoincrement for the table increments by default with 1. When I manually add something to the database, it'll increment with 1.
Am I missing (or my misstake, setting) a setting for FluentMySQL?
The toItem
func does nothing more then initiate a new Item
:
As you can see, the id
is set to nil
... which I would guess should store using null
while making the insert query.
The result in the database:
What am I missing?
Update: After following suggestions from this page I've added logging for the queries... and they seem to work as they should. Example of what fluent runs for query:
As you can see, it doesn't set the id
in any way. Maybe a MySQL problem?
swift - Vapor 3:返回模型时,如何轻松也返回子对象
我有一个模型活动,有多个月份:
当我想以最基本的方式返回一个活动时,它不包括月份,因为据我所知,计算属性不是可编码的。
所以,我创建了一个新结构来保存我想要返回的完整对象
然后像这样修改我的路由处理程序:
这确实有效。但是,这样做似乎需要做很多工作和大量样板文件。处理子对象或其他一般计算对象的正常 Swifty“Vapory”方式是什么?现在它似乎归结为你的模型的一堆不同版本(用于创建,用于返回,实际的完整内部模型),然后在它们之间进行转换,但我希望我在这里缺少一些东西?因为很容易忘记将新添加的模型属性也添加到该特殊的公共模型中。
或者至少,如果确实以推荐的方式在模型之间进行转换,是否有一种方法不需要路由处理程序中的所有这些嵌套地图/平面地图?
vapor - vapor 3 fluent-mysql 连接查询
Vapor 3中如何使用fluent-mysql加入查询和限制查询?例如:
SELECT a.*, b.* ON a.id = b.aid LIMIT 0,10
我找不到这样的例子和文件。
vapor - Vapor 3:将 Future 对象数组转换为 Future 其他对象数组
我试图为我的问题做一个我能想到的最基本的例子。我有一个Course
模型和一个多对多表,User
其中还存储了一些额外的属性(progress
在下面的示例中)。
现在,当我返回一个Course
对象时,我希望 JSON 输出是这样的:
而不是我通常会得到的,这是:
所以我创建了一些额外的模型和一个函数来在它们之间进行转换:
现在,我快到了,但我无法studentsQuery
从转换EventLoopFuture<[CourseUser]>
为EventLoopFuture<[Student]>
. map
我尝试了and的多种组合flatMap
,但我不知道如何将一组 Futures 转换为一组不同的 Futures。
swift - 通过 Vapor Fluent-MySQL 中的迁移更改 VARCHAR 字段
我正在为我的新项目使用Vapor 3
andFluentMySQL
并希望varchar(N)
通过迁移更改字段的最大长度 ( )。我怎样才能做到这一点?
我的项目中有一个模型Word
,它的一个字段是sourceIdentifier
最大String
长度为 12。模型是这样的:
一开始,我认为 5 对领域来说就足够了,并使用这段代码Table
为这个模型创建:
如上所示,使用字段创建的表sourceIdentifier
及其类型为.varchar(5, characterSet: nil, collate: nil)
.
现在我想通过迁移增加字段的最大长度。
我也试过MySQLDatabase.update
这样:
它没有用;没啥事儿。
如何通过Vapor
,FluentMySQL
和迁移更改表的结构?
vapor-fluent - 有没有办法检查记录是否存在?
我正在使用外部身份验证系统对用户进行身份验证。但我想从该外部系统捕获结果,并为成功通过身份验证且尚未在我的本地数据库中的用户创建记录。
我已经为正在工作的外部身份验证系统编写了自定义中间件,但我不知道如何检查用户是否已经存在于我当前的数据库中。我目前使用 FluentSQLite 作为我的后备数据库。
我想做的是
这不适用于 .first(),因为它不返回 Optional。
提前感谢您的任何帮助、想法或建议。
德里克