Laravel 5.5 Обновите флажок модели отношения многих ко многим - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть отношение многие ко многим , когда у меня было две модели, принадлежащие ToMany друг другу.

Поэтому я хотел бы обновить сводную таблицу, но сначала я хочу узнать,две модели уже существуют в этой сводной таблице.

Итак, вот определение моих отношений в двух моих моделях ниже:

Модель AnalysisRequest

public function request_methods()
        {
            return $this->belongsToMany('App\Models\Methodologies')->withTimestamps();;
        }

и в моей другой модели: Модель методологии

public function methods_requested()
    {
        return $this->belongsToMany('App\Models\AnalysisRequest')->withTimestamps();;
    }

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

Вот сводная модель

<?php

namespace App\Models;

use Eloquent as Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class AnalysisRequestMethodologies extends Model
{

        public $table = 'analysis_request_methodologies';

        public $fillable = [
            'analysis_request_id',
            'methodologies_id',
        ];

        /**
         * The attributes that should be casted to native types.
         *
         * @var array
         */
        protected $casts = [
            'analysis_request_id' => 'integer',
            'methodologies_id' => 'integer',
        ];

        /**
         * Validation rules
         *
         * @var array
         */
        public static $rules = [
            'analysis_request_id' => 'required|unique_with:analysis_request_methodologies,methodologies_id',
            'methodologies_id' => 'required',
        ];
}

Вот мой код контроллер ниже:

 public function edit($id)
{
    $analysis_request = $this->analysisrequestRepository->findWithoutFail($id);

    $checkeds = AnalysisRequest::find($id)->request_methods()->pluck('id');

    return view('encoder-dashboard.analysis-request-methods.create', compact('analysis_request', 'checkeds'));
}

И в моем представлении

<div class="form-group col-sm-12">
    @forelse($analysis_request->category->methodology as $method)
    <label>
        <?php $checked = in_array($method->id, $checkeds) ? true : false; ?>
        {{ Form::checkbox('methodologies_id[]', $method->id) }}
        {{ $method->name }} with the lead time of {{ $method->lead_time }} and the DOH standard of {{ $method->doh_standard }}
    </label>
    @empty
        <h3>The category you selected has no method yet</h3>
    @endforelse
</div>

Другая ссылка на вопрос , которая может быть связана с моим вопросом.

У меня есть ошибка в моем представлении , что говорит:

Нарушение ограничения целостности: 1052 Идентификатор столбца в списке полей является неоднозначным (SQL: выберите id из methodologies внутреннее соединение analysis_request_methodologies в methodologies. id = analysis_request_methodologies. methodologies_id, где analysis_request_methodologies. analysis_request_id = 10)

В упомянутом вопросе в решении сказано, что мне нужно использовать lists, но оно устарело в Laravel 5 Мне нужно использовать pluck вместо этого.Но все еще не могу решить загадку.

Ценю, если кто-то может помочь.Заранее спасибо.

1 Ответ

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

Я предположил, что имя вашей связанной таблицы methodologies, поэтому ваш запрос должен выглядеть следующим образом

$checkeds = AnalysisRequest::find($id)->request_methods()->pluck('methodologies.id');

Вы должны указать имя таблицы, потому что красноречиво создаете запрос и объединяете таблицы, когда вы говорите, что request_methods() mysql должен знать, к какой таблице принадлежит идентификатор

...