Laravel如何更新一对一关系?

Dar*_*ber 3 php class laravel laravel-4

条款表:

  • term_id
  • 名称
  • ug

Term_taxonomy表:

  • term_taxonomy_id
  • term_id
  • 描述

我的学期模型:

public function TermTaxonomy(){
    return $this->hasOne('TermTaxonomy');
}
Run Code Online (Sandbox Code Playgroud)

我的TermTaxonomy模型:

public function Term(){
    return $this->belongsTo('Term');
}
Run Code Online (Sandbox Code Playgroud)

我的类别控制器:

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
}
Run Code Online (Sandbox Code Playgroud)

如何更新一对一关系?也许与push()

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

cra*_*bly 6

您可以使用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']
]);
Run Code Online (Sandbox Code Playgroud)


Dar*_*ber 2

正如 Jarek Tkaczyk 在 Laravel eloquent 这个问题中的评论:更新模型及其关系

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

所以我使用这个代码。

$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();
Run Code Online (Sandbox Code Playgroud)

它有效。Term 和 TermTaxonomy 表已更新,但如果将 Push() 更改为 save(),即使 TermTaxonomy 关系已通过预加载加载,它也只会更新 Term 表Term::with('TermTaxonomy')

谢谢大家:D