拉拉维尔 如何更新一对一的关系


Laravel How to update one to one relationships?

术语表:

  • term_id
  • 名字
  • 鼻涕虫

Term_taxonomy表:

  • term_taxonomy_id
  • term_id
  • 描述

我的期限模型:

public function TermTaxonomy(){
    return $this->hasOne('TermTaxonomy');
}

我的术语分类模型:

public function Term(){
    return $this->belongsTo('Term');
}

我的类别控制器:

public function update($id){
    echo "$id"; // echo success
    echo $data['name']; // it should update name field in term table
    echo $data['slug']; // it should update slug field in term table
    echo $data['TermTaxonomy']['description']; // it should update description field in termtaxonomy table
}

我如何更新一对一的关系? 也许使用 push()

谢谢,对不起,我是拉拉维尔的新手。

您可以使用 Eloquent 的update()方法: https://laravel.com/docs/5.4/eloquent#updates

$Term = Term::with('TermTaxonomy')->find($id);
$Term->name = $data['name'];
$Term->slug = $data['slug'];
// Save The Term first
$Term->save();
// Now update the relation
$Term->TermTaxonomy->update([
    'taxonomy' => 'category',
    'description' => $data['TermTaxonomy']['description']
]);

正如 Jarek Tkaczyk 在这个问题中评论的那样 拉拉维尔雄辩:更新模型及其关系

没有其他办法,因为雄辩目前不知道是什么 关系在模型上,直到您将它们称为动态属性, 加载方式,急切加载等(推送仅在加载时有效 模型关系数组中存在的关系)

所以我使用这个代码。

$Term = Term::with('TermTaxonomy')->find($id);
$Term->name = $data['name'];
$Term->slug = $data['slug'];
$Term->TermTaxonomy->taxonomy = 'category';
$Term->TermTaxonomy->description = $data['TermTaxonomy']['description'];
$Term->push();

它有效。术语和术语分类表已更新,但如果将 push() 更改为 save(),则只会更新术语表,即使术语分类关系已经加载了预先加载Term::with('TermTaxonomy')

谢谢大家的:D