如何处理与Laravel中的模型不同的映射请求

时间:2018-11-29 08:31:51

标签: php laravel eloquent

我遇到的一个问题是我没有找到解决办法:更新项目时,我必须将其更新到模型不同的第二个数据库中(例如:请求发送输入文本“ title”并且必须将其记录到第二个数据库中的“ intitule”字段中。 在我的第一个数据库中,请求适合模型并且没有问题,但是在第二个中,更新查询没有发生。 我试图更改set mutator失败。 您是否遇到过这个问题并且已经解决了吗?

这是我的模特:

<?php

namespace App\Old;

use Illuminate\Database\Eloquent\Model;

class Stage extends Model
{
    // Ce modèle est celui de l'ancienne base de donnée

    // changement de connexion
    protected $connection = 'mysql2';
    //la nom de la table ne correspond pas au nom par défaut attendu par le framework au regard de du nom du modèle
    protected $table = 'stages';
    //changement de clés primaire par défaut attendu par le framework
    protected $primaryKey = 'id_stages';

    // Ces champs ne sont pas modifiables
    //protected $guarded = ['id'];
    protected $fillable = ['intitule_stage'];

    //On ne remplit pas de champs created_at et updated_at par défaut ds Eloquent
    public $timestamps = false;

    public function setTitleAttribute($value){
        $this->attribute['intitule_stage']=$value;
    }

}

这是控制器

public function update(Request $request, Formation $formation)
    {
        //dd($request);
        $requestFormation = FormationRequest::createFrom($request);
        $requestStage = StageRequest::createFrom($request);

        //dd($requestFormation);
        $formation->update($requestFormation->all());
        $stage = Stage::findOrFail($formation->id);

        if ($this->updateStage($requestStage, $stage)) {
            session()->flash('success_message', 'Modification enregistrée');
            return redirect(route('formation.index'));
        }

    }

    private function updateStage(StageRequest $request,Stage $stage):bool {
        //dd($request->input('titre'));
        return $stage->update($request->all());
    }

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我认为快速简便的解决方案是将$request中的值放入新数组。

$request->all()

将返回一个数组。因此,您可以获取所需的数据,将它们放入另一个数组中,然后推送更新方法。

private function updateStage(StageRequest $request,Stage $stage):bool 
{
      return $stage->update([
       'inititle' => $request->input('titre'),
        ...
      ]);
}