Синхронизация Laravel hasMany с массивом ownTo
Доброго времени суток всем! Суть моей проблемы заключается в следующем: есть две модели Contact и PhoneNum! отношения в моделях:
use Illuminate\Database\Eloquent\Model;
class Contact extends Model
{
protected $table = 'contacts';
public function phoneNums()
{
return $this->hasMany('App\Models\PhoneNum');
}
}
Модель PhoneNum
class PhoneNum extends Model
{
protected $table = 'phoneNums';
protected $fillable = ['phone_num'];
public function contact()
{
return $this->belongsTo('App\Models\Contact');
}
}
В форме редактирования контакта я получаю его имя и массив с номерами телефонов этого контакта.
ContactController
public function update(Request $request, $id)
{
$contact = Contact::find($id);
$contact->name = $request->name;
$contact->save();
//what should I do with the array $request->phoneNums ????
return redirect('/');
}
Я не могу синхронизировать эти новые телефонные номера с контактом по id. ты можешь помочь мне с этим?
3 ответа
Сначала вы должны удалить старые контакты, а затем вставить вновь созданные.
$contact->phoneNums()->delete();
$contact->phoneNums()->saveMany([$request->input('phoneNums')]);
Прежде всего: изменить $request->name
в $request->input('name')
, С этим изменением через 5 месяцев вы узнаете, что эта переменная исходит из формы.
Во-вторых, решения вашей проблемы. Это пример. Вам нужно изменить его на правильные имена и добавить переменную в поле массового назначения в модели.
foreach($request->input('phoneNums') as $phoneNumber){
$contact->phoneNums()->create([
'number' => $phoneNumber
]);
}
И посмотрите на правила PSR, чтобы вы могли сделать свой код более удобным для чтения: http://www.php-fig.org/psr/.
Добавьте метод синхронизации для обновления функции, как показано ниже
Public function update(Request $request, $id)
{
$contact = Contact::find($id);
$contact->name = $request->name;
$contact->save();
$contact->phoneNums()->sync($request->phoneNums, true)
return redirect('/');
}