当前位置: 首页 > 知识库问答 >
问题:

关联只有一个关系而不保存在Laravel 5中

刁越
2023-03-14

我创建了一个自定义的推送()方法,它以级联的方式保存所有模型的关系,并收集实体和子实体详细信息的完整快照用于审计日志。

一切都与belongsTo配合良好,并且有很多关系。我只是这样做:

    $ae->target()->associate(new AuditableEntryTarget(["name" => "single target"]));

    $ae->children->add(new AuditableEntryChild(["name" => "one of children"]));
    $ae->children->add(new AuditableEntryChild(["name" => "two of children"]));

    // add grandchildren to the first child
    $ae->children[0]->children->add(new AuditableEntrySubChild(["name" => "one of subchildren for first child"]));

    // add target subchild
    $ae->target->subtarget()->associate(new AuditableEntryTargetChild(["name" => "single target child"]));      

    // my custom method which saves and collects to audit log all the children, no matter if they are attached through hasMany or belongsTo
    $ae->push(); 

但问题在于他只有一种关系。它不提供任何方法将相关模型附加到我的根模型而不首先保存它。HasOne关系在Laravel中只有save()方法:

 /**
 * Attach a model instance to the parent model.
 *
 * @param  \Illuminate\Database\Eloquent\Model  $model
 * @return \Illuminate\Database\Eloquent\Model
 */
public function save(Model $model)
{
    $model->setAttribute($this->getPlainForeignKey(), $this->getParentKey());

    return $model->save() ? $model : false;
}

如您所见,它不仅关联,而且保存了模型。为了能够检测字段的所有更改,我的方法需要将关系附加到模型,但尚未保存,因为否则我将无法拦截保存过程并将数据附加到快照。BelongsTo关联has很多add用于附加模型而没有保存它们,但是我找不到任何类似的hasOne。

是否有任何方法可以将新模型实例附加到hasOne关系而不立即保存它(例如关联forbelongsTo添加forhasMany)?


共有1个答案

慕容明煦
2023-03-14

在Laracasts的帮助下,解决办法似乎是

$model->setRelation('child', $childInstance);

尽管如此,令人奇怪的是Laravel没有像初始化hasOne关系一样初始化hasOne关系。

 类似资料:
  • 编辑: 我正在使用热切加载,我认为这将影响它的工作方式。

  • 我在保存hasOne关联时遇到了一个问题,它在一张表上运行良好,但在第二张表上却不行。 和与之间有一种归属关系。现金头寸为其id保留两个FK。因此,当自动创建新的现金头寸时,它会保留或。第二个FK将为空。 问题是,Tickets Cashpositions保存工作正常,因此每次创建一张ticket时,都会创建一个相关的cashposition。但它不适用于现金头寸。我不明白为什么,因为设置和关系完

  • Car对象只是典型的JPA对象,没有对驱动程序的反向引用。 所以我试图通过这个来实现的是: 我可以使用详细的JSON视图阅读完整的汽车说明 或者我可以只读取汽车的Id,简写为jsonview 最重要的是,在创建新的驱动程序时,我只想传入汽车的JSON ID。这样,我就不需要在persist期间对Car进行不确定的读取,而只需要更新ID。 谢谢你。 更新:忘记了,我在创建驱动程序时通过的汽车的ID是

  • 嗨,我是新来的拉威尔,在理解如何建立人际关系方面有点挣扎。我试图在laravel中创建一个基本的restful api,有3个模型 表迁移: 书籍是主要的表格,作者与书籍有一对多的关系。类别与书籍有多对多的关系,因为一本书可以在多个类别中。 books表有一个author_id字段将其链接到author表。还有一个名为category_books的透视表,它包含category_id和book_i

  • 环境:Spring 4.0.3,spring-data-jpa 1.2.0,Hibernate 4.2.10,jackson 2.3.3,lombok 1.12.6, 科目实体(已编辑) 用户实体(已编辑) 事务管理器(编辑)

  • 我有一个实体: 要创建上述实体并将其保存到JPA存储库中,我将执行以下操作: 由于DB中的表存储了候选对象的FK,我认为设置一个id就足够了。但JPA希望我设置候选对象。这迫使我查询候选存储库。 是否需要从候选库中查询候选人以保存,或者如果我有可用的候选人id,我不能直接设置它?