【问题标题】:How to sync if model id is hidden field?如果模型 id 是隐藏字段,如何同步?
【发布时间】:2020-08-31 13:24:01
【问题描述】:

我正在尝试将数据同步到我的模型的数据透视表。但是我的Recipe 模型有一个隐藏的id 字段。像这样;

protected $hidden = ['id', 'content', 'difficulty_id'];

当我尝试将关系同步到数据透视表时,recipe_id 变为零。如果我从上面的$hidden 中删除id,它同步 id 没有任何问题。我还尝试为模型调用 makeVisible("id"),但没有帮助。

$changedMeals = $record->meals()->sync($meals);

id 保存在$hidden 中时如何同步它?

非常感谢...

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    目前,我在主要使用带有 $hidden 的枢轴,而在枢轴中没有外来元素,我使用 sync($request->field_to_sync) 并且我使用验证器来验证 id,并且它有效

    例如:

    class Recipe ... 
    {
      protected $hidden = ['id'];
    
      public function meals(){
        return $this->belongsToMany(Pivot::class);
      }
    }
    
    class Meals ...
    {
      protected $hidden = ['id'];
    
      public function recipe(){
        return $this->belongsToMany(Pivot::class);
      }
    }
    

    所以我假设你在代码中使用sync() 而没有使用Request::input(),你可以试试这个:

    $meals = Meals::select('id')->get()
    ->map(function($value, $key){
      return $value->setVisible(['id']);
    });
    

    那么你可以像这样使用sync()

    Recipe::find(1)->meals()->sync($meals);
    

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2011-06-08
      • 2011-09-13
      • 2011-01-06
      • 1970-01-01
      相关资源
      最近更新 更多