Laravel中保存模型时直接设置ID和设置eloquent关联关系有什么区别?

2024-03-13

我有两张桌子,employees and employee types.

employees有以下字段

  • id (PK)
  • 员工类型 ID(外籍)
  • name

and employee_type有以下字段,

  • id (PK)
  • title

我雄辩的模型函数是,

Employee

  class Employee extends Model {

    public function employeeTypes() {
        return $this->belongsTo('App\Model\EmployeeType');
    }
}

EmployeeType

class EmployeeType extends Model {
}

我不确定这是否是维持关系的正确方式。 插入时我可以遵循以下两种方法:

1.设置ID

 $emp = new Employee();
 $emp->employee_type_id = $request->type_id;
 $emp->name = $request->name;
 $emp->save();

2.设置关系

$emp->employeeTypes()->associate(EmployeeType::findOrFail($request->employee_types_id));
$emp->name = $request->name;
$emp->save();

两种方法都工作正常。

这两种插入类型有什么区别?

哪种方法最好?


在比较选项之前,还有第三个选项:

Using associate()仅用 id

$emp->employeeTypes()->associate($request->employee_types_id);

现在让我们看看这些方法的优点和缺点:

1.手动设置外键

  • 优点:这是最简单的方法
  • 反对:您必须显式使用外键列名称

2. 使用associate()与模型

  • 优点:关系将自动设置,因此您可以稍后使用该模型,而无需先从数据库中获取它
  • 优点:外键列的名称并不重要(只需要在关系声明中定义)
  • 反对:需要额外的查询来首先获取相关模型

3. 使用associate()仅用 id

  • 优点:外键列的名称并不重要(只需要在关系声明中定义)
  • 反:关联id后,关系不会被加载。当您访问时将运行查询$emp->employeeTypes

我个人更喜欢使用associate()(基本上所有关系方法,即使它们并不总是必要的)。如果我已经有了模型,我会传递它,否则我将只使用 id。您已经定义了与外键等的关系,因此您不妨使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel中保存模型时直接设置ID和设置eloquent关联关系有什么区别? 的相关文章

  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 从 smarty 访问 PHP 文件的变量(本地或全局)

    我有一个 php 文件 其中包含一些本地和全局变量 例如 foo 从此文件中调用 smarty 对象 如何在不更改 PHP 文件的情况下从 smarty 脚本访问 foo Thanks 如果你有一个名为 BASE 的常量变量 并且定义如下
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 如何向 laravel-passport 访问令牌添加自定义声明?

    我刚刚使用了 laravel passport 它与 jwt auth 相同 我想向我的 accessToken 添加一些自定义声明 可以吗 我想通过2fa status gt true在访问令牌和 API 调用时 有了这个访问令牌 我还想
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • System.Runtime.Serialization.InvalidDataContractException:没有设置属性的方法

    正如错误所示 我的属性没有设置器 但我不需要设置器 它应该是只读的 编辑 制作设置器internal 这仍然可以在程序集中设置 但这是一个很好的技巧 当用于位于由其他人使用的程序集中的数据对象时效果很好 因为那些使用程序集将无法设置该属性
  • 如何在所选项目上启用工作流程状态“写入”?

    由于未授予工作流状态写入权限 某些项目没有写入访问权限 当我在 Access Viewer 中单击写入权限时 访问查看器通知我 由于工作流状态写入访问权限 所选用户没有访问权限 不幸的是 我无法通过安全编辑器 手动 设置它 任何人都可以阐明
  • 使用 xpath 和 telegram 即时视图提取、创建和附加

    我怎么能够create and append below a 使用上面代码中的标签XPath and 电报即时查看 https instantview telegram org docs功能 a href https expmle com
  • 如何获得 Aptana 的代码协助以与 Google Maps API v3 配合使用?

    有一个 Google 地图 API v3Visual Studio 智能感知助手 http gmapvsdoc codeplex com 这可能非常适合 Visual Studio 但 Aptana 基于 Eclipse 使用不同的 Jav
  • 发送密钥不起作用 selenium webdriver python

    我需要将文本发送到描述文本区域 有一些预定义的文本 单击后会被清除 我尝试在 sendkeys 之前使用 clear 或 click 但没有任何效果正常 它将向那里发送文本 但它仍然是灰色的 并且保存页面后出现错误 说明中没有文本 我可以使
  • 在 Java 中使用 String 和 Object 的 equals() 方法

    Object o1 new Object Object o2 new Object o1 o2 System out println o1 equals o2 它返回false 它可以返回true 如果评论被删除 为什么同样的事情不适用于S
  • 是否可以对我的 iPhone 应用程序进行逆向工程?

    我创建了一个 iPhone 应用程序 我想将编译后的 app 文件发送到我的客户端 以便他可以在他的设备上安装和测试这个 iPhone 应用程序 他是否有可能查看这个 app文件的内容 比如这个应用程序中使用的资源文件 图像 声音文件等 他
  • 在 PDF 中使用 Javascript 列出 XFA 对象的属性

    我正在尝试创建一个包含多个文本字段的 PDF 文档 这些文本字段的高度可以增长到某个最大值 由于项目的限制 我使用的是 Adob e Designer 7 它很高兴允许使用 Javascript 然而 XFA 中的对象与 HTML DOM
  • 验证不适用于 EntityManager.merge()

    我对我的实体几乎没有验证 例如 NotNull 还有一些一代人 比如 Id GeneratedValue strategy AUTO Column name ID private Long id Column GeneratedValue
  • 如何通过 CloudFront 将对象放入 S3

    我想通过 CloudFront 将图像上传到 S3 如果你看到关于CloudFront的文档 你可以发现cloud front提供了put方法来上传到cloudFront 可能会有人问我为什么使用云端上传到S3 如果你搜索一下 你就能找到解
  • 运算符和操作数的排列算法

    我在一个面试网站上看到了这个问题 我们有 4 个数字 即 n1 n2 n3 n4 我们可以将它们放置在任何 顺序 我们可以在它们之间使用数学运算符 最终结果为 24 为此编写一个算法 需要 4 个数字并返回 false 或 true 最终结
  • Eclipse 给出错误,最近更新后缺少 R.java 文件

    我已经更新了我的SDK and ADT到最新版本 我也更新了Eclipse to Kepler最新一篇之后Juno My ADT版本是22 0 在此更新之后 当我创建新项目时 出现错误 指出R cannot be resolved to a
  • 编写一个http嗅探器

    我想编写一个程序来通过数据包捕获提取系统访问的网站的 URL IP 地址 我认为该 URL 将出现在数据部分中 即不在任何标头中 ethernet ip tcp udp 此类程序有时称为http嗅探器 我不应该使用任何可用的工具 作为初学者
  • 无法解析 IntelliJ Idea IDE 中的符号 javafx.application

    我尝试创建一个JavaFXIntelliJ Idea IDE 中的应用程序 但我收到编译错误 java 包 javafx application 不存在 我已将项目 SDK 和项目语言级别更改为 Java 8 重新加载项目 但没有帮助 然后
  • 如何给 TriangleMesh 中的一些三角形着色?

    我想用不同的颜色为 TriangleMesh 的一些三角形着色 最简单的方法是什么 甚至可以在 fxml 文件中实现 java代码 import javafx application Application import javafx fx
  • 以最小尺寸分割字符串

    我正在编写一个 python 脚本 它将接受点分隔的版本号 它将把这个字符串分成单独的部分 使用句点 作为分隔符 我的脚本最多支持 4 个组件 例如1 2 3 4 然而 用户可以指定less or more组件数量超过 4 个 我的脚本需要
  • 在 Bootstrap 3 导航栏上使用 NAV 和 DIV 有什么区别?

    在最新的 Bootstrap 3 导航栏的示例中 我在网络上找到了各种示例 其中外部导航栏标记是 div class navbar navbar default navbar static top div 和其他例子正在使用
  • Clang:错误:非静态数据成员的使用无效

    这个 gcc 是否过于友善并且做了开发人员认为它会做的事情 或者 clang 对某些事情过于挑剔 我是否遗漏了标准中的一些微妙规则 其中 clang 对此的抱怨实际上是正确的 或者我应该使用第二位代码 这基本上就是 offsetof 的工作
  • 如何在 Java 中将文件路径列表转换为 Hireachial 树

    有人可以给我一些建议吗 我想要获取文件路径列表 只是字符串 并转换为类似层次树的结构 因此有两个任务 解析字符串以创建树 以及创建树或某种映射结构以实际将结果放入其中 第三个任务是解析树以在 html 中显示为树 我使用的是 Java 7
  • Laravel中保存模型时直接设置ID和设置eloquent关联关系有什么区别?

    我有两张桌子 employees and employee types employees有以下字段 id PK 员工类型 ID 外籍 name and employee type有以下字段 id PK title 我雄辩的模型函数是 Em