我创建了一个自定义的推送()方法,它以级联的方式保存所有模型的关系,并收集实体和子实体详细信息的完整快照用于审计日志。
一切都与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关系而不立即保存它(例如关联
for
belongsTo
或添加
for
hasMany
)?
在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,我不能直接设置它?