首页 文章

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

提问于
浏览
1

条款表:

  • term_id

  • 名字

  • slug

Term_taxonomy表:

  • term_taxonomy_id

  • term_id

  • 说明

我的期限模型:

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

我的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

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

    正如Jarek Tkaczyk在_1676623中的评论

    没有其他办法,因为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的TermTaxonomy关系 Term::with('TermTaxonomy')

    谢谢大家:D

相关问题