Как вставить в сводную таблицу после отправки формы с помощью attach?

#laravel #eloquent

#laravel #красноречивый

Вопрос:

Я использую Laravel eloquent и пытаюсь вставить выбранный идентификатор пользователя из моей формы и сгенерированный идентификатор заявки в мою сводную таблицу с помощью attach, но я не знаю, как это сделать.

функция сохранения

  public function store(Request $request
 {        
     $ticket = new Ticket;
     $ticket->organisation_name = $request['organisation_name'];
     $ticket->postal_address = $request['postal_address'];
     $ticket->physical_address = $request['physical_address'];
     $ticket->description_brief = $request['description'];
     $ticket->hours_dedicated = $request['hours'];
     $ticket->commencement_date = $request['start_date'];
     $ticket->due_date = $request['due_date'];
     $ticket->client_id = $request['client_id'];
     $ticket->save();

     //trying to use attach here

     return redirect('/home');
 }
  

форма

  <form action="TicketsController@store" method="POST">
        {{csrf_field() }}
        <div class="form-group">
            <label>Organisation Name:</label>
            <input type="text" class="form-control" name="organisation_name" placeholder="Enter Organisation Name">
        </div>
        <div class="form-group">
            <label>Postal address:</label>
            <input type="text" class="form-control" name="postal_address" placeholder="">
        </div>
        <div class="form-group">
            <label>Physical address:</label>
            <input type="text" class="form-control" name="physical_address" placeholder="">
        </div>
        <div class="form-group">
            <label>Client:</label>
            <select class="form-control" name="client_id">
                @foreach ($forms as $form)
                <option>{{$form->client->client_id}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group">
            <label>Description:</label>
            <input type="text" class="form-control" name="description" placeholder="">
        </div>
        <div class="form-group">
            <label>Hours:</label>
            <input type="text" class="form-control" name="hours" placeholder="">
        </div>
        <div class="form-group">
            <label>Start date:</label>
            <input type="text" class="form-control" name="start_date" type="date" placeholder="">
        </div>
        <div class="form-group">
            <label>Due date:</label>
            <input type="text" class="form-control" name="due_date" type="date" placeholder="">
        </div>
        <div class="form-group">
            <label>User:</label>
            <select class="form-control" name="id">
                @foreach ($users as $user)
                <option>{{$user->id}}</option>
                @endforeach
            </select>
        </div>
        <input type="submit" name="submit" class="btn btn-primary">

    </form>
  

User.php

  class User extends Authenticatable
 {
 use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];
public function tickets(){
    return$this->belongsToMany(Ticket::class,'ticket_user','ticket_id','id');
}
  

Ticket.php

  class Ticket extends Model
 {

public function client(){
    return $this->belongsTo(Client::class,'client_id');
}
public function users(){
    return $this->belongsToMany(User::class,'ticket_user','id','ticket_id');
}

protected $primaryKey = 'ticket_id';
public $timestamps = false;

 }
  

Комментарии:

1. Я предполагаю, что id (элемент выбора) в вашей форме будет тем, user_id что вы хотите добавить в сводную таблицу?

2. Какую ошибку вы получаете при попытке выполнить то, что вы объясняете? Кроме того, в каком контроллере находится этот метод хранения?

3. да, я хотел бы добавить это в свою сводную таблицу.

4. это в моем TicketsController. Моя главная проблема в том, что я действительно не знаю, как это сделать.

Ответ №1:

Согласно документации, вы можете просто передать то, id что хотите прикрепить. После $ticket->save(); вы можете добавить следующее:

 $ticket->users()->attach($request->input('id'));
  

attach() также будет работать, если вы передадите массив идентификаторов, модель, коллекцию идентификаторов или коллекцию моделей.

Комментарии:

1. Похоже, что это сработает для пользователей, но я все еще не уверен, как прикрепить вновь созданный идентификатор заявки из вставки.

2. @Mr.t Вы меня потеряли. Вы не хотите добавлять это в ticket_user таблицу? Если нет, то в какую сводную таблицу вы хотите добавить?

3. извините, я неправильно понял ваше право. я пробовал это, но получаю ошибку ограничения внешнего ключа.

4. @Mr.t Я думаю, что ваши ключи в ваших отношениях неправильно установлены. В вашем тикете модель поменяется 'id','ticket_id' на 'ticket_id', 'id' и наоборот для вашей User модели

5. большое вам спасибо, что это было так. Это начинало сводить меня с ума