Создание и вставка отношений «многие ко многим» в Laravel - PullRequest
0 голосов
/ 26 марта 2020

Прежде всего, я начинающий и пытаюсь выучить все, что могу. Поэтому, если у меня есть ошибки, пожалуйста, исправьте меня.

Итак, я работаю над laravel проектом. У меня есть две модели; наркотики и взаимодействия. Я борюсь за то, чтобы добавить два лекарства и одно взаимодействие в одной форме. Но я также хочу проверить, введен ли уже препарат, чтобы избежать дублирования данных.

Вот мои модели:

class Drug extends Model
{
//Table Name
protected $table = 'drugs';
//Primary Key
public $primaryKey = 'id';
//Timestamps
public $timestamps = true;
//relationship
public function interactions()
{
return $this->belongsToMany('App\Interaction', 'drug_interaction', 'interaction_id', 'drug_id');
}
}


 class Interaction extends Model
    {
    //Table Name
    protected $table = 'interactions';
    //Primary Key
    public $primaryKey = 'id';

    //Timestamps
    public $timestamps = true;
    //Relationship
    public function drugs()
    {
    return $this->belongsToMany('App\Drug', 'drug_interaction', 'drug_id', 'interaction_id');
    }
    }

И это просто функция хранения в моем DrugsController

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


    //create drug
    $drug = new Drug;
    $drug->name = $request->input('name');
    $drug->info = $request->input('info');

    $drug->save();

    return redirect('/drugs')->with('success', 'İlaç Eklendi');
}

И это функция хранилища моего InterationsController.

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


    //create interaction
    $interaction = new Interaction;
    $interaction->name = $request->input('name');
    $interaction->description = $request->input('description');
    $interaction->category = $request->input('category');
    $interaction->save();

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

Глупыми словами я пытаюсь достичь:

  • запросить drug_name_one из первого текстового поля формы. Проверьте БД на название этого препарата, если существует; получить его идентификатор. Если этого не произойдет, создайте его и получите идентификатор.
  • запросите drug_name_two из второго текстового поля формы. Выполните то же, что и в первом шаге.
  • создайте взаимодействие, как указано в третьем текстовом поле формы.
  • присоедините их.

PS: после этой операции attach () сделано, я также не мог найти способ поиска двух лекарств, если они имеют общее взаимодействие. Если вы можете также упомянуть несколько советов для достижения этого, я буду благодарен.

Спасибо за помощь и советы по дальнейшему чтению. Спасибо всем!

Редактировать:

Это миграция create_interactions.

Schema::create('interactions', function (Blueprint $table) {
     $table->BigIncrements('id');
     $table->string('name');
     $table->string('description');
     $table->string('category');
     $table->timestamps();
            });
        }

Это входные данные для поля категории:

 <div class="form-group">
        {{Form::label('category', 'Kategori')}}
        {{Form::text('category', '', ['class' => 'form-control', 'placeholder' => 'Etkileşim Kategorisi'])}}
    </div> 

Я не мог сделать структуру формы так, как хотел. Это просто форма для создания взаимодействий без отношений.

1 Ответ

0 голосов
/ 29 марта 2020

Вот решение. Сейчас он работает хорошо.

Прежде всего я пытался назначить 2 препарата на одно взаимодействие. Итак, я импортировал select2 и использовал эту форму «выбора» для перечисления лекарств и выбрал несколько из них:

 <div class="form-group">
                    {!! Form::label('İlaçları Seçin') !!}
                    {!! Form::select('drugs[]', $drugs, null, ['multiple' => 'multiple', 'class' => 'form-control drugs']) !!}
                </div>

На контроллере Interactions:

$interaction = new Interaction;

        $interaction->name = $request->input('name');
        $interaction->description = $request->input('description');
        $interaction->category = $request->input('category');

        $interaction->save();

        $interaction->drugs()->sync($request->drugs, false);

Но я также хотел показать и отредактировать те лекарства, которые назначены для указанного c взаимодействия. Таким образом, в форме edit.blade. php есть этот сценарий:

<script type="text/javascript">
        $('.drugs').select2().val({!! json_encode($interaction->drugs()->allRelatedIds()) !!}).trigger('change');
    </script>

Этот сценарий вызывает связанные наркотики для выбранного взаимодействия в той же форме, что и я в create.blade.

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