【问题标题】:Laravel store value from for-each loop and passed it as arrayLaravel 存储来自 for-each 循环的值并将其作为数组传递
【发布时间】:2018-06-27 18:24:40
【问题描述】:

我的创建视图 [Subject_id, Lead_id] 中有两个 for-each 循环,我想使用数组方法将 for-each 值存储到我的数据库中,但我无法让它工作任何人都可以修改我的代码或指点我一个正确的方法谢谢。

控制器:

public function store(Request $request)
{
    //
    $input = $request->all();
    $items = array(['Subject_id','Lead_id']);
    foreach($input as $inputs) {
        $items[] = $inputs;
    }
    $scores = new Score();
    $scores->Subject_id=$items['Subject_id'];
    $scores->Lead_id=$items['Lead_id'];
    $scores->save();
    dd($request->all());
    return redirect()->route('scores.create')->with('notif', 'Success.');
}

这是消息:

创建视图

@foreach ($leads as $lead)
    <tr>
        <td>{{ $lead->student_name }}</td>
        <td><input type="checkbox" class="checkbox" name="Lead_id[]"  value="{{ $lead->id }}"></td>
    </tr>
@endforeach
@foreach($subjects as $subject)
 <label >
    <input type="checkbox" name="Subject_id[]" value="{{ $subject->id }}">
    {{ $subject->subject_name }}
 </label>
 @endforeach

DD 结果:

【问题讨论】:

  • 你能在 foreach 循环之后 dd() 你的 $items 数组并发布它吗?我感觉你的 $items 数组没有关联和/或没有 Subject_id 键集。
  • 我已经更新了问题,DD 工作正常
  • 我认为他的意思是dd($items)
  • 是的,我使用 dd($items) 工作正常
  • 您要在 1 个字段中保存数组吗?

标签: php laravel


【解决方案1】:

在您的控制器中尝试此代码

public function store(Request $request)
{
  $data = $request->all();

  $leads = $data['Lead_id'];

  $subject_ids = $data['Subject_id'];

  //insert using foreach loop
  foreach($leads as $key => $input) {
    $scores = new Score();
    $scores->Subject_id = isset($leads[$key]) ? $leads[$key] : ''; //add a default value here
    $scores->Lead_id = isset($subject_ids[$key]) ? $subject_ids[$key] : ''; //add a default value here
    $scores->save();
  }


  //insert using array at once
  $rows = [];
  foreach($leads as $key => $input) {
    array_push($rows, [
      'Subject_id' => isset($leads[$key]) ? $leads[$key] : '', //add a default value here
      'Lead_id' => isset($subject_ids[$key]) ? $subject_ids[$key] : '' //add a default value here
    ]);
  }
  Score::insert($rows);

  return redirect()->route('scores.create')->with('notif', 'Success.');
}

【讨论】:

  • 此代码有效,但我一次只能保存 1 个值..是否可以将其设为数组
  • 谢谢兄弟,它可以工作,但是有一点问题,如果我尝试保存 student1=[subject1,subject2,subject3] 它只会保存 1=1 值示例 student1=[subject1] 它没有'行不通,但谢谢人,我只需要弄清楚这一点,我真的很感激,你的答案是目前唯一工作的人,呵呵
  • 随时兄弟。 :) 如果您想将数组存储在表中,请使用 json_encode(array())。将编码值作为字符串存储在列中。使用 json_decode(string) 再次将其转换为数组。
  • 你真的帮了我很多兄弟。非常感谢你,我希望我能报答你的善意,给你买啤酒嘿嘿......
  • 很高兴听到它有帮助。帮助别人不用担心回报的感觉很好:)
【解决方案2】:

每次在 foreach 循环中创建模型实例都不是一种有效的方式。你可以这样做

   foreach($input as $inputs) {
     $dataArray[] = [
    'Subject_id' => $inputs['Subject_id'],
    'Lead_id' => $inputs['Lead_id'],
    ];    
    }
DB::table('Score')->insert($dataArray);

您可以随意操作数据。

有了这个代码我有这个

【讨论】:

  • 别指望我们为你写代码。我们只能为您提供提示/帮助以接近您的代码。
【解决方案3】:

更新你的刀片

    @foreach ($leads as $lead)
    {{ $lead->student_name }}
        @foreach($subjects as $subject)
          <input type="checkbox" name="Subject_id[$lead->id][]" value="{{ $subject->id }}">
          {{ $subject->subject_name }}
        @endforeach
   @endforeach

这是你的控制器

   public function store(Request $request)
    {
        //
    $subjects = $request->get('Subject_id');

       foreach($subjects as $key=>$oneLeadOptions) {

           foreach($oneLeadOptions as $option){
                  $scores = new Score();
                  $scores->Subject_id  = $option;
                  $scores->Lead_id = $key;
                  $scores->save();

           }
       }
    //To to other redirects logic here
    }

试试这个

【讨论】:

  • 此代码有效,但错误地保存了数据。它不会遵循分配给它的数组示例:lead_id[1,2,3,4,5] with subject_id[1]
  • 您是否想查看哪些学生选择了多少科目?学生 A = {学科 1,学科 2} 学生 b={学科 1.学科 2,学科 3} 学生 3 ={学科 3} 这就是你想要达到的吗??
  • 是的,例如正在分配学生 1 [subject1,subject2,subject3]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多