Обновление таблицы присоединения Laravel - PullRequest
0 голосов
/ 06 сентября 2018

, поэтому у меня есть 2 таблицы (проекты и тип_проекта) с отношением OneToMany.

public function project_types()
{
    return $this->belongsTo('App\Models\ProjectType', 'project_type_id');
}

public function projects()
{
    return $this->hasMany('App\Models\Project', 'project_type_id');
}

Мой ProjectController:

 public function update(Request $request, $id)
{
    if ($request->isMethod('get')){

        $types = ProjectType::all()
            ->pluck('name');

        // dd($types);
        return view('projects.form', compact('types'), ['project' => Project::find($id)]);
    }

    $rules = [
        'name' => 'required',
        'description' => 'required',
        'project_code' => 'required',
    ];

    $validator = Validator::make($request->all(), $rules);
    if ($validator->fails())
        return response()->json([
            'fail' => true,
            'errors' => $validator->errors()
        ]);

    $project = Project::find($id);
    $project->name = $request->name;
    $project->description = $request->description;
    $project->project_code = $request->project_code;
    $project->project_type_id = $request->project_type_id;
    $project->start_p = $request->start_p;
    $project->start_r = $request->start_r;
    $project->end_p = $request->end_p;
    $project->end_r = $request->end_r;
    $project->days_p = $request->days_p;
    $project->days_r = $request->days_r;
    $project->date_requested = $request->date_requested;

    $project->save();

    return response()->json([
        'fail' => false,
        'redirect_url' => url('projects')
    ]);
}

Моя форма:

<div class="form-group row">
        {!! Form::label("project_types", trans('project.Type'),["class"=>"col-form-label col-md-3 col-lg-2"]) !!}
        <div class="col-md-8">
            {!! Form::select("project->project_type_id", $types, null, ["class"=>"form-control".($errors->has('project->project_type_id')?" is-invalid":""),'placeholder'=>'Project Type']) !!}
            <span id="error-name" class="invalid-feedback"></span>
        </div>
    </div>

В моем виде формы у меня есть выпадающий список со всеми именами типов проектов (поэтому я предполагаю, что мои отношения хорошие), но когда я пытаюсь обновить информацию о проекте, форма отправляет NULL для project_type_id.Я не получаю никаких ошибок в консоли.

Может кто-нибудь помочь!Спасибо!

Ответы [ 2 ]

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

ОК нашел мою ошибку. Я выбирал название типа проекта, мне также требовался идентификатор.

 $types = ProjectType::all()
            ->pluck('name', 'id');

        return view('projects.form', compact('types', 'project'));

и в форме:

 {!! Form::label("project_types", trans('project.Type'),["class"=>"col-form-label col-md-3 col-lg-2"]) !!}
        <div class="col-md-8">
            {!! Form::select("project_type_id", $types, null, ["class"=>"form-control".($errors->has('project_type_id')?" is-invalid":""),'placeholder'=>'Project Type']) !!}
            <span id="error-name" class="invalid-feedback"></span>
        </div>
0 голосов
/ 06 сентября 2018

Попробуйте что-то вроде этого:

public function projects()
{
    return $this->hasMany(Project::class, 'project_type_id', 'id');
}

public function project_types()
{
    return $this->belongsTo(ProjectType::class, 'project_type_id', 'id');
}

И в вашем контроллере измените это:

if ($request->isMethod('get')){

        $types = ProjectType::all()
            ->pluck('name');

        // dd($types);
        return view('projects.form', compact('types'), ['project' => Project::find($id)]);
    }

К этому:

if ($request->isMethod('get')){

        $types = ProjectType::all()
            ->pluck('name');
        $project = Project::find($id);
        // dd($types);
        return view('projects.form', compact('types', 'project'));
    }

И в соответствии с вашим шаблоном лезвия, я думаю, у вас есть ошибки в Form::select()

Формы документов Laravel и HTML

Form::select('select_name', $types->toArray());

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