在开发中,我在laravel中遇到了很多迁移问题.
我创建了一个迁移.当我完成创建时,在迁移过程中(例如,外键约束)会出现一个小错误,导致"php artisan migrate"失败.他确实告诉我错误的位置,然后迁移到一个不一致的状态,在错误发生之前对数据库进行了所有修改,而不是下一个.
这使得当我修复错误并重新运行migrate时,第一个语句失败,因为已经创建/修改了列/表.然后我知道的唯一解决方案是进入我的数据库并手动"回滚"所有内容,这样做的时间更长.
migrate:rollback尝试回滚以前的迁移,因为当前未成功应用当前迁移.
我还试图将我的所有代码都包装到DB :: transaction()中,但它仍然不起作用.
这有什么解决方案吗?或者我只需要手动回滚东西?
编辑,添加一个示例(不编写Schema构建器代码,只是某种伪代码):
Migration1:
Create Table users (id, name, last_name, email)
Run Code Online (Sandbox Code Playgroud)
Migration1执行正常.几天后我们进行迁移2:
Create Table items (id, user_id references users.id)
Alter Table users make_some_error_here
Run Code Online (Sandbox Code Playgroud)
现在将会发生的事情是,migrate将调用第一个语句,并使用外键向用户创建表项.然后,当他试图应用下一个语句时,它将失败.
如果我们修复了make_some_error_here,我们就无法运行migrate,因为它创建了表"items".我们无法回滚(也不刷新,也不能重置),因为我们无法删除表用户,因为表项中存在外键约束.
然后,继续的唯一方法是转到数据库并手动删除表项,以便以一致的状态迁移.
我有一个非常奇怪的错误,在用户与操作系统本身交互之前,设备就绪事件不会在iOS设备中触发,这就是按下前面的按钮,通过向下拖动显示通知中心或者拖动设备设置.
一旦用户开始拖动iOS通知中心,就会启动设备.
像这样简单的东西是行不通的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap:* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
<title></title>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">
var log = document.getElementById("log");
if(window.cordova){
log.innerHTML = "with cordova";
document.addEventListener("deviceready", function onDeviceReady(){
log.innerHTML = "deviceready";
}, false);
}else{
log.innerHTML = "with browser";
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,它使用wifi在所有与我的应用程序在同一网络中的手机之间广播UDP消息.
我设法从许多具有外部AP的手机发送/接收数据包,这是我的路由器.
但鉴于没有AP的情况,我希望用户能够使用他们手机的Wifi热点功能,这样他们仍然可以使用我的应用程序.因此,其中一部手机将是wifi热点,其他所有手机都将连接到该热点.
我要求用户通过自己的方式连接到wifi.无论是外部AP还是外部AP.然后当我的应用程序启动时,它会检查手机是否连接到wifi网络,调用WifiManager.isWifiEnabled()和NetworkInfo.isConnected().
问题是,如果我在使用热点的手机中调用这些功能,则函数isConnected()将返回false.我无法使用WifiManager.getDhcpInfo()获取广播地址.连接到热点的其他手机完全可以正常工作.但由于WifiManager被禁用,热点手机无法发送任何广播.
所以,我的问题是"有没有办法检查手机目前是否是一个wifi热点?如果有的话,有什么办法可以获得它的广播地址吗?"