RumusBin
@RumusBin
Живу, учусь, не стесняюсь

Как в Laravel синхронизировать модель отношений hasMany по типу sync?

Доброго времени всем. Не могу решить задачу с редактированием контакта и его телефонных номеров.
Есть две модели Contact
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->phonenumber ????

        return redirect('/');
    }

И вот совсем растерялся и не знаю, как синхронизировать новые тел. номера.
Очень нужен дельный совет! Спасибо!
  • Вопрос задан
  • 1679 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vism
Я сделал хардкорно
Удалил - добавил
$contact->phoneNums()->delete();
foreach(...){
//добавляем из массива
}


Ну а если делать граммотно.
То собираете из инпута существующие айдишники
Делаете поиск по номерам notIn айдишники из инпута
Удаляете их
добавляете те которые остались.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы