使用模型工厂、一对一和一对多关系定义 Laravel 外键,无需创建不必要的模型

2024-03-01

最近,我一直在尝试通过 Model Factories 和 Faker 使用 Laravel 播种来为我的数据库播种。

对于简单的模式,让它工作是轻而易举的:)。然而,我在处理复杂的数据库模式时遇到了几个问题,其中涉及外键和表关系:

  • 一对一
  • 一对多
  • 多对多

...就像链接中描述的那样:模型工厂中的 Laravel 5.1 外键 https://stackoverflow.com/questions/32425420/laravel-5-1-foreign-keys-in-model-factory.

在本主题中,官方文档 https://laravel.com/docs/5.3/seeding#using-model-factories建议像这样运行数据库种子:

public function run()
{
    factory(App\User::class, 50)->create()->each(function ($u) {
        $u->posts()->save(factory(App\Post::class)->make());
    });
}

...但是这个解决方案有一个问题:当处理许多数据库表并运行许多种子(它们之间有许多关系)时,通常会创建许多不必要的模型使用这种方法。例如,如果我们在上面的示例之一之前运行 PostsTableSeeder.php,则所有这些帖子都不会链接到用户,并且永远不会在测试和开发中使用...

因此,在寻找一种方法来处理这种情况时,我提出了一种适合我的功能解决方案,并避免不必要地创建那些“孤儿”模型......

我想与大家分享,所以只是在答案中解释:)。


所以这是我的解决方案:

该示例涉及:

  • 用户和个人资料(用于说明一对一关系)
  • 用户和帖子(用于说明一对多关系)

    // ONE TO ONE relationship (with Users already created)
    $factory->define(App\Profile::class, function (Faker\Generator $faker) {
        return [
            'user_id' => $faker->unique()->numberBetween(1, App\User::count()),
            // Rest of attributes...
        ];
    });
    
    // ONE TO MANY relationship (with Users already created)
    $factory->define(App\Posts::class, function (Faker\Generator $faker) {
        $users = App\User::pluck('id')->toArray();
        return [
            'user_id' => $faker->randomElement($users),
            // Rest of attributes...
        ];
    });
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用模型工厂、一对一和一对多关系定义 Laravel 外键,无需创建不必要的模型 的相关文章

  • UNIX时间记录时区吗?

    我想问一下UNIX时间 UNIX时间是否记录时区 我将托管从美国芝加哥移至 JST 问题是我的整个 MySQL 数据库都有 UNIX 时间 芝加哥 美国时区 的记录 我有一个 PHP 代码来显示之前的时间 例如 3 天前 昨天等 当我搬到新
  • 包括 PHPUnit 在内的麻烦

    我想开始为我的代码编写测试 因此我使用以下命令安装了最新的 PHPUnit wget http pear phpunit de get phpunit phar chmod x phpunit phar mv phpunit phar us
  • 如何用PHP进行有向图绘制?

    我正在寻找一种在 PHP 中绘制有向图的方法 如http upload wikimedia org wikipedia commons 0 08 Directed acirclic graph png http upload wikimed
  • 如何在 Windows 上安装 PHP 的 PDO 驱动程序?

    我在 Windows 服务器上安装了 Apache PHP 5 6 和 MySQL 5 7 在 php ini 中 我启用了以下内容 extension php mysql dll extension php mysqli dll exte
  • 如何显示多维数组第二层的 json 值?

    解决此代码时遇到问题 这些是数组 Array 0 gt stdClass Object id gt 1 name gt delux price gt 213 description gt tv gt 0 breakfast gt 0 par
  • 如何使用 HHVM proxygen 重写规则忽略任何文件?

    我创建一个这样的文件example ini hhvm server type proxygen hhvm server default document index php hhvm virtual host default rewrite
  • Apache 重写 - 获取 PHP 中的原始 URL

    我在 nginx 或 Apache 中重写了这个地址 http domain com hello 到像这样的脚本 http domain com test php ref hell 如何在 PHP 中访问这个重写的 URL 因为 如果我使用
  • 如何使用 php 处理传出 webhook (Slack)

    我已经配置了 Slack outgoing webhook 但我不确定如何处理 Slack 发送到我指定的 URL 的 HTTP POST 请求 工作流程是这样的 当有人向指定通道发送消息时 API 将向指定 URL 之一发送 HTTP P
  • 如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]

    这个问题在这里已经有答案了 我从数据源中获取以下格式的日期和时间 19 24 15 06 13 2013 我需要将其转换为 12 小时 AM PM 格式 不带秒 所以上面的时间是晚上 7 24 日期应保留为 mm dd yyyy 格式 在
  • PHP 中的异步数据库/服务调用:Gearman 与 pthreads

    在我们的 LAMP 站点上 我们遇到一些服务必须多次调用数据库才能提取数据的问题 通常在 PHP 中完成此操作的方式 至少我的经验 是串行的 这显然是低效的 我们可以通过使用缓存和聚合一些查询来缓解一些低效率的问题 但在某些情况下我们仍然需
  • Kohana_Exception [ 0 ]:需要有效的 cookie salt。请设置 Cookie::$salt

    我正在学习本教程 http kowsercse com 2011 09 04 kohana tutorial beginners http kowsercse com 2011 09 04 kohana tutorial beginners
  • PHP 和 ADODB 连接失败

    我的任务是迁移服务器 这包括移动我没有构建的应用程序 其中一些具有 ADODB connection 我似乎无法在新服务器上修复它 我只得到空白屏幕 我已经对 ADODB connection 与 PHP 进行了相当广泛的研究 但找不到明确
  • PDO fetch() 失败时会抛出异常吗?

    有没有方法PDO语句 fetch http php net manual en pdostatement fetch php如果 PDO 错误报告系统设置为抛出异常 则在失败时抛出异常 例如 如果我设置 PDO ATTR ERRMODE g
  • php包含来自另一个目录的文件

    这是一个结构示例 main css style css include article1 php article2 php header php index php 在我的 header php 中 我有以下 css 代码 例如 在我的 i
  • 在mysql中搜索“SanF”时获取旧金山的记录

    当我搜索 SanF 时获得 San Francisco 记录 SELECT FROM table WHERE col LIKE san Works SELECT FROM table WHERE col LIKE san F Works S
  • 从 CodeIgniter 中的 URL 捕获哈希值 (#)

    我有一个看起来像的网址 mysite com transactions view 123456 效果很好 但是我的客户现在希望在 url 中包含 hashbang mysite com transactions view 123456 现在
  • 如何以 Magento 方式实现库存过滤器?

    在我的 magento 网站上可以看到缺货的产品 我想要在分层导航中添加一个自定义过滤器 其中显示 排除缺货 当客户单击它时 应该隐藏缺货产品 默认情况下 我在 系统 gt 配置 gt 目录 gt 库存 下启用显示 显示缺货产品 即我希望客
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7

随机推荐

  • 如何在 Visual Studio 2008 中使用 Visual Studio 2010 C++ 工具?

    如果可能的话 有人知道如何在 Visual Studio 2008 中使用 Visual Studio 2010 附带的完整 c 工具集 编译器 链接器 sdk 吗 更改 选项 gt 项目和解决方案 gt VC 目录 下监听的所有目录就足够
  • 从 Django 的 RawQuerySet 获取数据库游标

    我在 Postgres 中有一个相当大的表 20M 我尝试对其进行原始 Django 查询 tweets TweetX objects raw SELECT from twitter tweet using twittertest 我很快就
  • 仅终止 SQL Server 中的用户进程

    有些用户忘记关闭使用我们的 SQL 2014 数据库的访问查询 当发生这种情况时 它会阻止他们正在访问的表在夜间重建 有什么方法可以杀死这些用户而不杀死系统进程 据我所知 系统进程不仅限于 SPID gt 50 根据杀死用户进程spid g
  • Javascript正则表达式仅适用于整数,不以0开头但允许0

    我需要一个正则表达式来验证整数 05 and 00是不允许的 但是0被允许 目前我有这个 1 9 d 但它不允许0 感谢帮助 1 9 d 0 这就是你的模式
  • 在 Android 中将 XML 转换为 JSON 对象

    我有一个 XML 字符串 如下所示
  • jquery .not() 不工作

    我试图在每个实例上发生一些事情 除了有禁用类的地方 但 not 似乎不起作用 这是我所拥有的内容的简短版本 if this not Disabled Do Something 但是 如果我反转它 即 if this is Disabled
  • gfortran 中的清零

    有没有办法强制 gfortran 中的下溢清零 我不敢相信这是第一次有人问这个问题 但我在任何地方都找不到任何相关内容 如果这是重复的 我会承担责任 您可以使用支持 Fortran 2003 IEEE 模块的最新版本的 gfortran 来
  • 使用 Wordpress 自动完成 jQuery

    我想在 Wordpress 中使用 Jquery 自动完成和 ajax 调用从 json 文件中检索数据 这是我的代码 HTLM div class form group formComuni div
  • 如何找出 UITextField 导致 UIKeyboardWillShowNotification 的原因?

    我试图在我的应用程序中使用自定义键盘 但在尝试将其限制为一个特定的 UITextField 时遇到问题 我的代码基于这个 Xcode 项目 http billabonger net blog wp content uploads 2009
  • 如何正确使用Scala Play Anorm和Option[String]插入NULL SQL

    当 Option String 为 None 时插入它的正确方法是什么 下面的代码插入一个空字符串 这与mysql中的NULL不同 是根据partnerCode的内容预先构建SQL字符串的唯一方法吗 叹息 异常 DB withConnect
  • 如何同时使用 AVAssetReader 和 AVAssetWriter 处理多个轨道(音频和视频)?

    我知道如何使用AVAssetReader and AVAssetWriter 并成功地使用它们从一部电影中抓取视频轨道并将其转码为另一部电影 不过 我也想用音频来做到这一点 我必须创建并AVAssetExportSession在我完成初始转
  • 在android中,当方向改变时,背景图像不会改变

    我的 ActivityGroup 有一个定义的线性布局
  • Paypal 订阅 IPN - 用户多次订阅的问题

    我正在使用 PayPal 订阅和即时付款通知 IPN 来处理我网站上的订阅者 在大多数情况下 它运行良好 但我偶尔遇到一个问题 通常 如果用户取消订阅 我会等待 期限结束 subscr eot 通知 然后再禁用对我的网站的访问 因此 如果他
  • powershell 和 diskpart

    简而言之 我有一个卷需要为其分配驱动器号 使用 diskpart 现在的问题是音量不再保持不变 您输入磁盘部分 a 执行 列出卷 特定卷将是卷 0 然后 退出 再次输入并再次执行 列出卷 这次是卷 4 如此继续 现在 如果这是由人完成的 则
  • Python 无法从包中导入模块

    我有一个具有以下布局的 Flask Restful 项目 为方便起见更改了文件名 myproject init py app py common init py util py foo init py main py utilities p
  • 使用 HtmlAgilityPack 对特定子节点进行计数

    我在 HtmlAgilityPack 中使用的 XPath 选择遇到了很多麻烦 我想选择全部li嵌套在另一个元素中的元素 如果存在 li女巫有a标记为id menuItem2 这是 html 示例 div ul li a a li li a
  • 矩阵和算法“螺旋”

    我想问是否有一些算法准备好 允许我这样做 我有一个矩阵 m 列 x n 行 其中有 m x n 元素 我想给这个元素从中心开始并以螺旋形式旋转的位置 例如 对于 3x3 的矩阵 我有 9 个这样定义的元素 5 6 7 4 9 8 3 2 1
  • 如何从 CodeIgniter 内部访问标准 PHP 会话数据

    我正在开发一个 Codeigniter 项目 并使用 CI 会话 存储在数据库中 但我需要检查另一个应用程序 在同一个 cookie 域中 的另一个 SESSION 中的变量 但是当我尝试从 CI 控制器使用本机 PHP 会话来获取这一点信
  • Base X 字符串编码

    我正在寻找一个例程 将字符串 字节流 编码为任意基本 字母表 如base64编码 但我可以选择字母表 我见过一些例程对数字进行基本 X 编码 但不对字符串进行基本 X 编码 这是我的BaseX BaseN 编码算法的实现 https git
  • 使用模型工厂、一对一和一对多关系定义 Laravel 外键,无需创建不必要的模型

    最近 我一直在尝试通过 Model Factories 和 Faker 使用 Laravel 播种来为我的数据库播种 对于简单的模式 让它工作是轻而易举的 然而 我在处理复杂的数据库模式时遇到了几个问题 其中涉及外键和表关系 一对一 一对多