Laravel хранит данные в eloquent сводной таблицы - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь сохранить данные в БД из формы. У меня есть таблица с колонками subject, subjectType(Economic, Informatic subject) и subjectType_subject(pivot table). Я могу хранить данные в таблице Subject, но мне нужно хранить идентификаторы в таблице subjectType_subject. На мой взгляд, у меня есть выпадающее меню - экономические и информатические темы. Если я хочу добавить тему экономики, мне нужно добавить идентификаторы в сводную таблицу, чтобы отобразить ее.

Как я могу это сделать, пожалуйста?

Теперь я могу хранить данные только в таблице Subject, и они не отображаются в разделе «Экономическая тематика»:

SubjectController

public function create() {
}

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required',
        'abbreviation' => 'required',
        'description' => ''
    ]);

    $subject = new Subject();
    $subject->name = $request->input('name');
    $subject->abbreviation = $request->input('abbreviation');
    $subject->description = $request->input('description');

    $subject->save();

    return redirect()->back()
         ->with('success', 'Úspěšne jsi vytvořil nový předmět.');
    }
}

Модель объекта

public $table = 'Subject';

protected $fillable = [
    'name',
    'abbreviation',
    'description'
];

public function subject_type() {
    return $this->belongsToMany('App\Subject_type',  'subjectType_subject');
}

Модель SubjectType

public $table = 'SubjectType';

public function subject() {
    return $this->belongsToMany('App\Subject', 'subjectType_subject');
}

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Сначала попробуйте исправить ваши соглашения об именах. Все было бы намного проще, если бы вы следовали соглашению об именах laravel. Вот руководство .

  • Имя таблицы должно быть snake_case (изменить subjectType на subject_type)
  • Сводные таблицы должны быть единичными именами моделей в алфавитном порядке (изменить subjectType_subject на subject_subject_type)
  • ownToMany должно иметь имя функции множественного числа. (изменить public function subject_type() на public function subject_types(), а также public function subject() на public function subjects()

Затем используйте ключевое слово laravels attach, чтобы заполнить сводную таблицу.

$subject = new Subject();
$subject->name = $request->input('name');
$subject->abbreviation = $request->input('abbreviation');
$subject->description = $request->input('description');
$subject->save();

$subject->subject_types()->attach(id_of_your_subject_type); // for example, 
             the id of economics in your subject_type table is 1, then put 1 inside the parenthesis
0 голосов
/ 03 ноября 2018

Просто добавьте красноречивый запрос ниже

 $subject->save();

Как:

$subjecttype= new SubjectType;
$subjecttype->subjectid= $request->input(‘subjectid’);
$subjecttype->save();

  return redirect()->back()
         ->with('success', 'Úspěšne jsi vytvořil nový předmět.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...