как обновить данные связанных таблиц? Laravel
Я так понимаю что нужно обновить данные из таблицы :language_levels строка то остается и ее id , который является language_level_id в таблице profile_languages соответственно в profile_languages менять не нужно, а только в language_levels и только поле level_id так как профиль profile_id остается тот же и строка в language_level_id
class LanguageLevelController extends Controller { public function update(Request $request) {
$profile_id = $request->profile_id;
$language_id = $request->language_id;
$level_id = $request->level_id;
//тут что-то не то не работает
$profile = Profile::where('id', $profile_id)->get();
$profile->languages->language->update(['language_id' => $language_id]);
$profile->languages->level->update(['level_id' => $level_id]);
}
}
class Profile extends Model
{
public function profile_languages(){
return $this->hasMany(ProfileLanguage::class);
}
/**
* @return HasManyThrough
*/
public function languages(){
return $this->HasManyThrough(LanguageLevel::class,ProfileLanguage::class, 'profile_id', 'id', 'id', 'language_level_id');
}
}
class LanguageLevel extends Model
{
/**
* @return HasOne
*/
public function language(){
return $this->HasOne(Language::class, 'id', 'language_id');
}
/**
* @return HasOne
*/
public function level(){
return $this->HasOne(Level::class, 'id', 'level_id');
}
}
спасибо!!
Ответы (1 шт):
Автор решения: Junior
→ Ссылка
как считаете такая нормальная конструкция? Работает зато)
public function update(Request $request) {
$profile_id = $request->profile_id;
$language_id = $request->language_id;
$level_id = $request->level_id;
$profile = Profile::where('id', $profile_id)->first();
$profile_languages_ids = $profile->profile_languages->pluck('language_level_id');
foreach ($profile_languages_ids as $profile_languages_id){
LanguageLevel::where('id', $profile_languages_id)->where('language_id', $language_id)->update(['language_id'=>$language_id, 'level_id'=>$level_id]);
}
}
