问题标签 [factories]
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.
laravel - Laravel 工厂在随机但独特的元素生成时失败,其中包含许多元素
我正在开发服务的后端,用户可以在其中设置多个其他实体(多媒体、活动、其他用户)的“喜欢”(在我的例子中称为“检查”)。
这些检查对于每个可检查实体和检查执行者必须是唯一的,如下所示:
当我测试系统时一切正常,但是当我尝试使用工厂用随机数据填充数据库时遇到了一些问题。我在工厂中强制执行唯一性约束,但有时我使用的代码没有捕获重复的选择,并且我收到一个违反唯一性约束的 PDO 异常。这里的执行代码:
我尝试了两种不同的方式并遇到了两个不同的问题。
第一个选项:
通过这种方式,对于唯一性约束,一切似乎都可以正常工作,但是如果要创建的元素太多(目前它试图生成 1900 个随机检查),生成只会在某个点停止,而在 1300 个元素之后的某处没有说什么(它永远不会相同的号码)。我通过使用第二个 SSH 连接登录并在播种发生时直接监视数据库上的检查号发现了这一点:它一直在增长,在某些时候它只是停止了,但播种机仍在运行。
第二种选择:
我最喜欢这个,但在某些时候它只是抛出一个像这样的 PDO 错误
并停止播种机。重复与以前相同的过程,我看到数据库中的检查次数保持为 0,直到发生错误,然后它变成一个可变数(大约 150)。我猜 Laravel 内部并没有真正在数据库上写入记录,直到它完成生成它们,但是通过一些调试,我发现我放置的约束执行代码实际上在某些时候可以防止重复,这意味着数据库外观可以看到以某种方式创建但尚未写入的记录,这让我更加困惑为什么检查不能一直工作(据我所知,生成脚本不是在多线程上运行)。
关于 Laravel 如何低级管理这些事情或如何解决这些问题的任何想法/见解?我对第二个选项特别感兴趣,但如果我也能理解第一个选项的问题,我会更高兴:D
php - Laravel 模型工厂属于关系不起作用
大家我有关于 Laravel模型工厂的问题,我有以下工厂定义。
基本上,该模型与内容表和资源belongsTo
表有两种关系,并定义为content_id和resource_id列。
所以我希望这个播种机创建内容、资源,然后在创建之前将它们附加到视频模型。
但是,这不起作用,并且我收到有关videos
表上 content_id 外键的错误。我在这里做错了什么?任何帮助是极大的赞赏 :)
php - 如何在 Laravel 的另一个工厂中创建用户实例?
我正在尝试使用 Laravel 5.5 中的工厂创建一些测试数据。我正在运行这个
我收到错误消息Column 'user_id' cannot be null
我的 Thread 工厂创建了一个新的实例用户,但它似乎没有返回值。
我根本没有修改用户工厂。我已从文档中复制并粘贴,但无法获取。任何帮助将不胜感激我是新手,我相信这很简单。
php - 与 Laravel faker 的嵌套关系 - laravel 播种机
我想用 laravel 文档https://laravel.com/docs/5.5/database-testing的关系部分中提到的用户和评论制作一个帖子播种器
预期的输出是有 3 个用户的帖子,每个用户有 5 条评论。
但是发生了错误:
在 Builder.php 第 2459 行:调用未定义的方法 Illuminate\Database\Query\Builder::save()
php - 在使用工厂为数据库播种时使用 Laravel 中的 PHP Faker 生成“唯一的”条目
所以类似于唯一的验证规则(参见:https ://github.com/felixkiss/uniquewith-validator ),我想知道如何生成一个条目,其中一列与另一列是唯一的。我想按如下方式播种我的数据库。
例子:
“步骤”表中有 12 个步骤。每个步骤应该有 5 个类别,每个类别都存储在“step_categories”表中。这些类别中的每一个都分配有一个唯一的订单号 1 到 5,每个“step_id”都是唯一的。
请在此处查看此图像以获取数据库应该是什么样子的示例:https ://imgur.com/a/XYA5yyn
对于上面的图像示例,我必须手动在数据库中创建条目。我不想每次都手动生成它,比如说我犯了一个错误并且不得不回滚迁移。
我正在使用工厂来生成这些数据。所以工厂名称是StepCategoriesFactory.php
显然我用文件中的create()
方法调用工厂DatabaseSeeder.php
。
我考虑过在 for 循环中执行此操作,然后我意识到当我调用'step_id' => App\Model::all()->random()->id
获取新 ID 时,我无法确保我没有获取我刚刚生成 5 个条目的 ID . 我对 Laravel 真的很陌生,我什至不知道从哪里开始。没有关于 SO 的真实信息,faker 可以将唯一性与另一列一起使用。我该怎么办?
注意:步骤 id 并不总是 1-12。步骤 ID 可能会有所不同,具体取决于步骤是否被删除和重新制作。因此,仅分配step_id
等于 1-12 是行不通的。
更新:这是我刚写的一些代码,我认为我在正确的轨道上。也许。我已经抓住了step_id
它的number
字段,因为它始终是 1-12,并且我已经从条目中抓取了 IID。但现在我被困在如何生成订单 1-5 而不会重复。我还没有运行它,因为它不完整,我知道如果没有正确的订单号它会抛出一个错误。
更新2:我认为我在这里走在正确的轨道上。但是我收到一个未定义的变量错误。当我从匿名函数中放入第一行时,它会将每个条目的顺序重置为“1”。如何使 $autoIncrement 变量可用于匿名函数?播种机在更新之间保持不变。
错误图像:https ://imgur.com/a/ywkd0Lb 终端中出现 Die/Dump 错误的第二张图像:https ://imgur.com/a/rOGRv32
在这里参考这篇文章:https ://laracasts.com/discuss/channels/laravel/model-factory-increment-value-faker?page=1
更新 3:我忘记了use ($autoIncrement)
匿名函数的代码行。下面的代码已更新,但现在我收到一个不同的错误,指出订单列具有空值并且无法插入。显然它应该是'1'。即使在我调用 my $autoIncrement->next();
which 应该将其增加到 '1' 之后,它仍然根据终端返回 null。但是,当我对其进行死转时,$autoIncrement->current()
它会返回 1。奇怪。
更新 3 错误:https ://imgur.com/a/STOmIjF
StepCategoriesFactory.php
编辑:悬赏这个问题,因为我认为这将有助于社区获得详细的答案。我正在寻求帮助来解释如何确保我通过每个循环获取相同的条目。
moq - 使用 Autofac 和 Moq 在服务库中模拟代理工厂
我有一个简单的控制台应用程序,它使用 Autofac 作为 IoC 容器。
应用程序调用“TestClass1”中的方法“TestMethod1”。
TestClass1 依赖于 TestClass2,它声明了一个委托工厂供 Autofac 与 TestClass1 构造函数一起使用。
这一切都按预期工作 - Autofac 解决了 TestClass2 依赖项,我得到输出“:TestMethod2:TestMethod1”。
现在我想使用 Moq 和 Autofac.Extras.Moq 扩展来模拟 TestClass2。我将以下方法添加到控制台应用程序,并从 Program Main 方法中调用它。
现在,当我期望“:NOT_TEST_METHOD2:TestMethod1”时,我得到了输出“:TestMethod1”。似乎还没有调用模拟。当我单步执行代码时,这一点得到了证实。
我也尝试过使用 mock.Provide() 来解决模拟问题,正如其他地方所建议的那样(见下文)。仍然没有运气。
这似乎是一个非常简单的场景,但我在任何地方都没有找到有效的答案。谁能看到我做错了什么?谢谢你的帮助!
php - Laravel 工厂与 Faker 的双向关系
我有两个正在尝试为其编写工厂的模态。LineItems 和发票。问题是它们是基于彼此动态的。
LineItems 知道它们被分配到哪个 Invoice,Invoices 保存分配给它们的 LineItems 的总值。
LineItems 看起来像这样:
然后为 Invoices 建立一个工厂,我需要汇总 LineItems 的金额,没什么大不了的,我可以在工厂内部创建 LineItems 并总计:
但现在的问题是,如何将 Invoiceid
编号保存回刚刚创建的 LineItems?显然,在工厂被保存之前,我没有id
,也就是在 Closure 回调完成之后。我无法将 LineItems 从 Closure 中退回,因为工厂需要使用退货,因此它实际上可以保存 Invoice。
我知道这似乎是一个 X/Y 问题。但是我已经在 SO 上查看了一些类似的问题,我不喜欢这些变通方法,因为它们非常脆弱,依赖于不明显的操作顺序或某些数据在你可以运行之前已经存在一个工厂。我宁愿找到使用工厂的解决方案,并尽可能将所有问题都保留在本地。
另外,如果有解决方案,这意味着工厂可以自我维持,这对所有相关人员来说都更好。但如果这是不可能的,那将是一个可以接受的答案,因为它允许我寻求其他(尽管更脆弱)保存测试数据的方法。
model - 厂房返回 company_id 和 package_id 相同
在我的代码中,每个公司都属于一个包,并且有一个包使用类 Package extends Model。包装型号:
公司模式
包使用模型
在我的数据库播种机中,我正在尝试为每个创建的公司构建一个包圣人。所以它看起来像这样:
最后我的 pacage 使用 fctory 像这样:
公司工厂:
当我运行它时,它返回错误:
当我检查数据库时,我看到它为每个公司 ID 和包 ID 创建了 3 个包。因为我想第四个,当它尝试用 4 个 id 构建它并且我只插入 3 个包时,外键失败。我的代码有什么问题?
django - 我怎样才能伪造一个多多边形字段?
我正在为包含 MultiPolygonField 的模型创建一个 Django 工厂。当我运行测试时它会抛出一个错误。详情如下。
我创建了一个特殊的提供者来伪造这个字段。代码取自 Django 文档:
然而,我在运行测试时遇到的错误让我感到难过。
这似乎表明我没有返回正确的类型,但我无法弄清楚它想要什么,而不是我返回的 MultiPolygon 对象。为什么它认为我回来了<class 'method'>
?
任何建议都将受到欢迎!
laravel-5 - Laravel 工厂 - 如何保存嵌套关系
我正在使用 laravel 工厂并坚持使用嵌套关系船。例如,一个用户可能有很多帖子,而一个帖子有很多评论。我能够通过 each() 方法与用户一起保存帖子,但无法通过帖子保存评论
因为 save() 方法接受数组,所以我必须对帖子使用 make() 方法,但现在我不能在帖子中附加评论。经过一个小时的搜索,我不喜欢这个解决方案,但现在我已经解决了。我将它发布在寻找解决方案的研究员的答案中,如果有更体面的解决方案,请更新我。谢谢