Laravel如何更新一对一的关系?

时间:2015-01-26 03:31:13

标签: php class laravel laravel-4

条款表:

  • term_id
  • 名称
  • 蛞蝓

Term_taxonomy表:

  • term_taxonomy_id
  • term_id
  • 描述

我的期限模型:

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

My 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()

谢谢,抱歉,我是laravel的新人。

2 个答案:

答案 0 :(得分:5)

您可以使用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']
]);

答案 1 :(得分:0)

正如Jarek Tkaczyk在this question Laravel eloquent: Update A Model And its Relationships

中的评论
  

没有别的方法,因为Eloquent目前还不知道什么   关系在模型上,直到你将它们称为动态属性,   使用加载方法,急切负载等加载(推送仅适用于加载   模型关系数组中存在的关系

所以我使用这段代码。

$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();

它有效。 Term和TermTaxonomy表已更新,但如果将push()更改为save(),则只更新Term表,甚至已加载Eager load Term::with('TermTaxonomy')的TermTaxonomy关系

谢谢大家:D