【问题标题】:Laravel How to update one to one relationships?Laravel 如何更新一对一的关系?
【发布时间】:2015-03-24 12:44:22
【问题描述】:

术语表:

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

谢谢,对不起,我是 laravel 的新手。

【问题讨论】:

标签: php class laravel laravel-4


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    作为 this question Laravel eloquent: Update A Model And its Relationships 中的 Jarek Tkaczyk 评论

    没有其他办法,因为 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 表,即使 TermTaxonomy 关系已经加载了 Eager load Term::with('TermTaxonomy')

    谢谢大家:D

    【讨论】:

    • 要记住的一点是,push 将更新所有已加载关系的所有updated_at 时间戳,即使它们没有更改。当使用 updated 方法来保存任何更改的关系数据时,您将更好地控制正在更新的数据,并将保持 updated_at 时间戳更准确,因为它只会在更改的关系上更新它。根据项目的不同,这可能非常有用和有价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2020-03-13
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多