我可能有一种方法可以让 Laravel 自动生成包含多对多关系中枢轴索引的表。或者也许通过工匠?
到目前为止,我正在创建我的实体模型(例如用户和角色:一个用户有许多角色,一个角色由许多用户承担)我在每个模型中定义了belongsToMany 方法。
然后我为 create_users_table、create_roles_table 和 create_role_user_table 创建迁移)
如果有一个命令在创建两个实体后创建具有 n:n 关系表的第三个实体,那就太好了。
(也许答案是:不,它不存在......)
您好,我正在尝试使用 laravel 5 框架导出大表(1Millions 行到 CSV 文件)。
粘贴在下面的代码无法正常工作,因为它分配了太多内存。所有结果都存储在内存中,直到我完成写入文件(php exec)
起初我尝试过(非常低效)
1. 从数据库中获取结果
$mytable = 'table';
$filePath = storage_path().'/csv/test.csv';
$mins = Carbon::now()->subMinutes(10000);
// set the fetch Assoc mode temoporarly
DB::setFetchMode(PDO::FETCH_ASSOC);
$results = DB::table("$mytable")->where('ts_activity', '>=', $mins)->get();
// revert the fetch Class mode
DB::setFetchMode(PDO::FETCH_CLASS);
Run Code Online (Sandbox Code Playgroud)
2. 将结果写入文件
if(count($results)>0){
$headerLine = implode(',',array_keys($results[0]));
dump($headerLine);
if(!file_put_contents($filePath, $headerLine.PHP_EOL)){
throw new Exception("Cannot write FILE: {$filePath}");
}
foreach($results as $row){
foreach($row as $k=>$v){
if($row[$k] == '0000-00-00 00:00:00'){$row[$k] = '';}
$row[$k] = trim(str_replace(array(',', "\n", "\r"), ' ', $row[$k]));
}
//ADDs content …Run Code Online (Sandbox Code Playgroud) 拥有一个提供 REST 服务的 Laravel 应用程序
在对服务的每次调用中,我都希望有一些参数,请求将被路由并传递给控制器。
实现一些中间件来检查请求的正确性是否正确,或者在某些情况下(还不知道哪些)最好在控制器内部实现输入验证?
考虑到 Laravel 4 过滤器,已转移到中间件解决方案,我会将输入验证逻辑放在中间件实例中。
出于测试目的,我将作业排入队列。我在另一边打开了一个命令行,我在其中执行:
php工匠队列:工作
上面的命令一直在终端上监听和运行,直到我手动杀死它。
因为我正在从队列中单独测试 Jobs。让命令执行一个或多个条目并退出而不是作为守护进程执行并且必须以某种方式杀死它会非常好......
还要考虑到,在不重新启动守护程序化命令的情况下,不可能编辑代码并使当前执行 queue:work 获取更新。
我有一个响应 Http 事件 (get) 的 lambda 函数,发送请求,我接受一对标头 headerA 和 headerB。
Lambda是用nodejs / typescript编写的
在实现上,我有一个定义为对象集合的全局变量:
let storage:{[myIndex :typeofHeaderA]? : storageDrivers } = {}
Run Code Online (Sandbox Code Playgroud)
当我收到请求时,我将类的新实例存储到上述全局变量中的“预期”索引上(如果尚未存在):
if(!storage[headerA]){
storage[headerA] = new MyStorageDriver(headerB)
}
Run Code Online (Sandbox Code Playgroud)
我所经历的是,如果考虑两个不同的请求,彼此接近:
第一个请求标头A1标头B1
第二个请求标头A1标头B2
在第二次请求之后,存储[headerA1]将包含 MyStorageDriver(headerB1) 的实例,而不是 MyStorageDriver(headerB2)
就像在不同的请求 lambda 执行中一样,全局范围内存在请求之间共享或重用。
这是 AWS lambda 的预期结果还是其他原因导致我出现这种意外行为?
我当前的解决方案(并仔细检查此行为,是更改全局变量,如下所示:
let storage:{[myIndex :typeofHeaderB]? :{
[myIndex :typeofHeaderA]? : storageDrivers }
} = {}
Run Code Online (Sandbox Code Playgroud)
然后根据请求这样分配:
if(!storage[headerB]){storage[headerB]={}
if(!storage[headerB][headerA]){
storage[headerB][headerA] = new MyStorageDriver(headerB)
}
Run Code Online (Sandbox Code Playgroud) laravel ×3
aws-lambda ×1
csv ×1
eloquent ×1
export ×1
laravel-5 ×1
middleware ×1
mysql ×1
node.js ×1
performance ×1
php ×1
queue ×1
testing ×1
typescript ×1