При редактировании обновите сводную таблицу - laravel - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть таблицы questions, tags и сводная таблица question_tag. question_tag таблица имеет только два поля question_id и tag_id.

Когда я добавляю вопрос, он также вставляет соответствующие значения в сводную таблицу.

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

$question->tags()->updateExistingPivot($tag_id, array('any attribute'=>$value));

но в моем случае в сводной таблице нет дополнительных атрибутов

Модель вопроса

public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }

Tag Model

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

Ответы [ 3 ]

0 голосов
/ 08 сентября 2018

попробуйте это:

$question->tags()->sync([$tag_id]);
0 голосов
/ 08 сентября 2018

Попробуйте это

$question->pivot->attribute = "Value";

$question->pivot->save();

0 голосов
/ 08 сентября 2018

Попробуйте это

$question->tags()->updateExistingPivot($question->id, ['tag_id' => $newTag->id]);

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

/** @test */
public function it_can_update_the_pivot_table()
{
    // Create a Tag
    $tag      = factory(Tag::Class)->create();

    // Create a Question
    $question = factory(Question::Class)->create();

    // Create a pivot table record
    DB::table('question_tag')->insert(['question_id' => $question->id, 'tag_id' => $tag->id]);

    // Assert that there is a pivot table record before we attempt to change it
    $this->assertNotNull(DB::table('question_tag')->where([
        ['question_id', $question->id],
        ['tag_id', $tag->id],
    ]));

    // Attempt to change the with the tag id of the tag we created above.
    $question->tags()->updateExistingPivot($tag->id, ['tag_id' => 2]);

    // Query all pivot table records with the question id
    $new = DB::table('question_tag')->where(
        'question_id', $question->id
    )->first();

    // assert that the pivot record was updated
    $this->assertEquals(2, $new->tag_id);
}
...