2015-01-26 3 views
0

Условия таблице:Laravel Как обновить отношения один к одному?

  • term_id
  • имя
  • пробкового

Term_taxonomy стол:

  • term_taxonomy_id
  • term_id
  • описание

Моя Term Модель:

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.

+1

возможно дубликат [? Laravel лучший способ сохранить данные один к одному отношений] (http://stackoverflow.com/questions/28107658/laravel-best-way-to-save-data-one -to-one-relationship) – goldlife

+0

Я думаю, это не дублируется, так как этот вопрос - как обновить. то я хочу знать, как обновлять. Благодарю. –

ответ

1

, как Ярек Tkaczyk комментарий в this question Laravel eloquent: Update A Model And its Relationships

Там нет другого пути, как и Красноречивым в настоящее время не знает, что отношения на модели, пока не называть их, как динамическое свойство, нагрузки методом нагрузки, (push работает только с загруженными отношениями, которые присутствуют в массиве отношений модели)

поэтому я использую этот код.

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

и он работает. Срок и TermTaxonomy таблица обновляются, но если изменение толчок() для сохранения() это только обновить Term таблицы даже отношения TermTaxonomy уже загружены с жадной нагрузкой Term::with('TermTaxonomy')

Спасибо за все: D

+0

Следует иметь в виду, что 'push' будет обновлять все временные метки' updated_at' любых загруженных отношений, даже если они не были изменены. При использовании «обновленного» метода для сохранения любых измененных данных отношений вы получите лучший контроль над тем, какие данные обновляются, и сохраните метку timestamp 'updated_at' более точную, так как она обновит ее только на этом измененном отношении. В зависимости от проекта это может быть весьма полезным и ценным. – crabbly

1

Вы можете использовать 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'] 
]); 
Смежные вопросы