【问题标题】:Laravel Sync method only sending the 2nd dataLaravel 同步方法只发送第二个数据
【发布时间】:2015-08-01 22:38:47
【问题描述】:

这段代码应该是从数据库中删除所有旧数据并添加新数据时(使用sync())

现在我有一个包含用户的项目,用户可以通过复选框链接到项目。

所以选中复选框时,此功能将触发,但例如,当我说 user 1user 2 正在通过此功能添加到 pivot table 时,它只会发送 user 2 和 @987654326 @打不通,怎么回事?

当我添加 3 个用户 user 1user 2user 3 时,只会添加 user 2

控制器

public function update(CreateProjectRequest $request)
{
    if($request->get('contribute'))
    {
        foreach($request->get('contribute') as $k => $contribute)
        {
            if($contribute == 1)
            {
                $project = $this->project->find($request->project_id);
                $project->users()->sync(array($k));

            }
        }
    }

    $project = $this->project->find($request->project_id);
    $project->fill($request->input())->save();

    return redirect('project');
}

刀片

@foreach($users as $user)
            <tr>
                <td>
                    {{$user->firstname}} {{$user->middlename}} {{$user->lastname}}
                </td>
                <td>
                    {!! Form::checkbox('contribute['.$user->id.']', '1', $user->projects->contains('id', $project->id)) !!}
                </td>
            </tr>
@endforeach

在我的更新方法开始时的dd($request-&gt;input());(选择至少3个用户)这将得到回报:

  array:9 [▼
  "_method" => "PATCH"
  "_token" => "0uIZNn6zwZjVKfgE0ckhDULeYda0OaLzKVdUgoM8"
  "name" => "Dire Straits"
  "completion_date" => "2015-05-18"
  "DataTables_Table_0_length" => "10"
  "contribute" => array:3 [▼
    1 => "1"
    3 => "1"
    2 => "1"
  ]
  "completed" => "1"
  "active" => "0"
  "project_id" => "11"
]

所以1 / 3 / 2 将是user_id=&gt; 1 应该是值。

【问题讨论】:

标签: php laravel


【解决方案1】:

问题是syncloop 中被调用了 3 次,所以每次它同步一个值。您必须在 sync 中传递一个 id 数组,例如:

$project->users()->sync([1,3,2]);

或者,如果您愿意,可以在 contribute==1 时使用 attach,在 contribute==0 时使用 detach

或者如果contribute在用户被取消选择时没有返回输入并且只在用户被选中时返回,那么你可以尝试:

$this->project->users()->sync(array_keys($request->get('contribute'));

我刚刚注意到您还有另一个错误,除非您通过一次调用更新多个项目,否则您应该将下面的行放在函数的第一行。

$project = $this->project->find($request->project_id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2019-06-21
    • 2020-03-27
    相关资源
    最近更新 更多