Сохранение новой записи через сводную таблицу в Laravel - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь создать новую запись, когда я отправляю данные формы из моего внешнего интерфейса, и я изо всех сил пытаюсь обернуть голову, как я могу это сделать.Я искал примеры и мне пока не повезло найти что-то.Таким образом, я отправляю данные для нового задания, и мои задания имеют связь между сводной таблицей и задачами.Вот структура отношений.

  1. Пользователь hasMany Задачи
  2. Задача принадлежит То Пользователь
  3. Клиент имеет много Помолвки
  4. Помолвка Принадлежит Клиент
  5. Задание свойство ToMany Задания (и, конечно, наоборот)

Если я отправляю данные в , сохраняют новое задание, и я также хочу сохранить новоеЗадача в в то же время Я изо всех сил пытаюсь понять, какой метод я должен использовать для достижения этой цели.

Я понимаю, что мне нужно, чтобы Задание и Задание существовали до разворотатаблица заполняется.

EngagementsController.php (для сохранения нового задания)

public function store(Request $request)
{
    $data = $request->validate([
        'client_id' => 'required|integer',
        'return_type' => 'required|string',
        'year' => 'required|string',
        'status' => 'required|string',
        'assigned_to' => 'required|string',
        'done' => 'required|boolean'
    ]);

    $engagement = Engagement::create([
        'client_id' => $request->client_id,
        'return_type' => $request->return_type,
        'year' => $request->year,
        'assigned_to' => $request->assigned_to,
        'status' => $request->status,
        'done' => $request->done,
    ]);

    return response($engagement, 201);
}

После запуска $engagement = Engagement мне интересно, могу ли я использоватьданные для поля assigned_to для Задание и Задание , как это?

$engagement = Engagement::create([
    'client_id' => $request->client_id,
    'return_type' => $request->return_type,
    'year' => $request->year,
    'assigned_to' => $request->assigned_to,
    'status' => $request->status,
    'done' => $request->done,
]);

$data = $request->assigned_to;
$task->tasks()->create($data);

Модель взаимодействия

class Engagement extends Model
{
    protected $fillable =
    [
        'client_id',
        'return_type',
        'year',
        'assigned_to',
        'status',
    ];
    public function client() 
    {
        return $this->belongsTo('App\Client');
    }

    public function tasks()
    {
        return $this->belongsToMany('App\Task', 'engagement_task', 'engagement_id', 'task_id');
    }

    public function questions()
    {
        return $this->hasMany('App\Question');
    }

}

Модель задачи

class Task extends Model
{
    protected $fillable = ['user_id'];

    public function user()
    {
        return $this->belongsTo('App\User');
    }

    public function engagements()
    {
        return $this->belongsToMany('App\Engagement', 'engagement_task', 'task_id', 'engagement_id');
    }
}

1 Ответ

0 голосов
/ 15 октября 2018

Вы можете сделать $task = Task::create(['user_id' => $request->get('assigned_to')]).

Далее вам необходимо прикрепить задание к сражению, $engagement->tasks()->attach($task->id);

Кстати, вы можете убратьнемного улучшите свой контроллер, проверив данные в запросе формы .

Затем вы можете создать свою помолвку, $engagement = Engagement::create($engagementRequest->validated())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...