Laravel 5 Laravel 5.4循环中的save()

Laravel 5 Laravel 5.4循环中的save(),laravel-5,eloquent,laravel-query-builder,Laravel 5,Eloquent,Laravel Query Builder,我正试图“征服”拉威尔,但有些概念仍然让我难以理解 让我们以下面的代码为例: public function updateMenuGroup($groupId, $label, $icon, $sort, $userId) { /*get model to be updated by id*/ $updateGroups = MenuGroups::findMany($groupId); /** * set attributes to be updated * I

我正试图“征服”拉威尔,但有些概念仍然让我难以理解

让我们以下面的代码为例:

public function updateMenuGroup($groupId, $label, $icon, $sort, $userId) { /*get model to be updated by id*/ $updateGroups = MenuGroups::findMany($groupId); /** * set attributes to be updated * I loop, since I get collection of models fetched by findMany() */ foreach($updateGroups as $update) { /** * label (group name) is passed as an array of group names * for every language, so I am fetching them by using * language passed by model fetched by findMany (find gets only first mode) */ $update->label = $label[$update->lang]; //array $update->icon = $icon; $update->sort = $sort; $update->system_employee_id = $userId; $update->save(); } } $update->label包含一个数组,对于不同的语言有不同的值-比如我有'en','de'语言

当我运行上面的代码时,只有“en”被写入-覆盖“de”的值


有人能告诉我为什么会发生上述情况吗?

您不能将数组插入一个属性

尝试使用内爆函数

像这样

$update->label = implode(",", $label[$update->lang]);

$label是一个数组$label[$update->lang]这不再是数组,而是使用$update->lang键从数组中获取的字符串,例如$label['en']。您在哪里实例化了$update?$updategroup=$this->menuGroups->findMany$groupId;获取模型的集合,并使用foreach对其进行循环$更新是集合中的一个模型。是的,我通过循环$label数组和执行Laravel pseudo static pseudo测试了该选项,因为它根本不是静态的,当您深入研究它时-就像它一样-GroupModel::where'lang',$lang-$lang是$label循环中的一个键。它成功了。我有点希望,你可以使用hasMany直接获取的模型。看来你不能。我还使用了$this->menuGroups->find$groupId->where'lang',$lang->where'id',$groupId。这种情况很有趣。您需要where'id'、$groupId,否则您将获得单一语言的两倍。有趣的谢谢你的时间。
You need to instantiate update model class inside loop.

foreach($updateGroups as $update)
  {
    /**
     * label (group name) is passed as an array of group names
     * for every language, so I am fetching them by using 
     * language passed by model fetched by findMany (find gets only first mode)
     */
      $update=New ModelClass(); 
      $update->label = $label[$update->lang]; //array
      $update->icon = $icon;
      $update->sort = $sort;
      $update->system_employee_id = $userId;

      $update->save();
  }