Laravel Красноречивый поиск «многие ко многим» с Ajax - PullRequest
0 голосов
/ 29 марта 2020

У меня был этот вопрос на прошлой неделе. Я нашел решение для добавления и удаления связанных моделей. Но на этот раз я хочу сделать поиск.

База данных

таблица лекарств

Schema::create('drugs', function (Blueprint $table) {
            $table->BigIncrements('id')->unique();
            $table->string('name')->unique();
            $table->mediumText('info');
            $table->timestamps();
        });

таблица взаимодействий

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

таблица взаимодействия лекарств

Schema::create('drug_interaction', function (Blueprint $table) {
            $table->integer('interaction_id')->unsigned();
            $table->foreign('interaction_id')->references('id')->on('interactions');
            $table->integer('drug_id')->unsigned();
            $table->foreign('drug_id')->references('id')->on('drugs');
            $table->timestamps();
        });

Модели

Drug

class Drug extends Model
{
    //Table Name
    protected $table = 'drugs';
    //Primary Key
    public $primaryKey = 'id';
    //Timestamps
    public $timestamps = true;

    public function interactions()
    {
        return $this->belongsToMany(Interaction::class);
    }
}

Взаимодействие

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(Drug::class);
    }
}

InteractionsController

Поскольку функция редактирования / обновления работает правильно и является частью того, что я ищу, я только добавление функции обновления conrtoller.

public function update(Request $request, Interaction $interaction)
    {
        $interaction->name = $request->name;
        $interaction->description = $request->description;
        $interaction->category = $request->category;

        $interaction->save();

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

        return redirect('/interactions')->with('success', 'Interaction Updated');
    }

Форма для добавления лекарств во взаимодействия

<div class="container">
        <div class="row">
            <div class="col-md-12">
                {!! Form::open(['url' => 'interactions/' . $interaction->id, 'method' => 'patch']) !!}

                <div class="form-group">
                    {{Form::label('name', 'Etkileşim İsmi')}}
                    {{Form::text('name', $interaction->name, ['class' => 'form-control', 'placeholder' => 'Etkileşim İsmi'])}}
                </div>

                <div class="form-group">
                    {{Form::label('description', 'Etkileşim Açıklaması')}}
                    {{Form::textarea('description', $interaction->description, ['class' => 'form-control', 'placeholder' => 'Etkileşim Bilgisi'])}}
                </div>
                <div class="form-group">
                    {{Form::label('category', 'Kategori')}}
                    {{Form::text('category', $interaction->category, ['class' => 'form-control', 'placeholder' => 'Etkileşim Kategorisi'])}}
                </div>
                <div class="form-group">
                    {!! Form::label('İlaçları Seçin') !!}
                    {!! Form::select('drugs[]', $drugs, null, ['multiple' => 'multiple', 'class' => 'form-control drugs']) !!}
                </div>
                {{Form::submit('Güncelle', ['class'=>'btn btn-primary'])}}
                {!! Form::close() !!}
            </div>
        </div>
    </div>

select2. js

$(document).ready(function() {
    $('.drugs').select2({
        minimumResultsForSearch: '25',
        minimumInputLength: '3',
        placeholder: "Etkileşimi olan 2 İlacı Seçiniz."
    });
});

SearchController

class SearchController extends Controller
{
    public function index()
    {
       $drugs = Drug::pluck('name','id');
    }

У меня также есть форма, которую я использовал для взаимодействия / create.blade на search.blade:

<div class="col-md-12">
                     {!! Form::open(['url' => 'getInteraction', 'method' => 'get']) !!}

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

Мне не удалось создать запрос для поиска " связанных взаимодействий"для каждого выбранного" препарата", сгруппируйте эти взаимодействия и напечатайте их только в том случае, если в массиве дважды присутствует идентификатор взаимодействия .

Вся помощь приветствуется. Спасибо всем !

...