【问题标题】:laravel retrive old() wherein query valueslaravel 检索 old() 其中查询值
【发布时间】:2021-09-08 09:02:35
【问题描述】:

我有 2 个多值选择列表,我使用 jquery 在它们之间传递用户。

<select multiple="multiple" id="ListAllUsers" class="form-control">
                    @foreach ($users as $user)
                        <option class="content" value="{{ $user->id }}">{{ $user->name }}</option>
                    @endforeach
                </select>

<select name="user_id[]" required multiple="multiple" id="SelectedUsers" class="form-control">
                    @if (!empty(old('user_id')) && $create_form)
                        @foreach ($old_value_users as $old_user)
                            <option class="content" value="{{ $old_user->id }}">{{ $old_user->name }}</option>
                        @endforeach
                    @endif
                </select>

现在,我的问题是,当我在 whereIn 查询中传递 old('user_id') 值时,我只得到数组的第一个结果,而不是传入的所有结果。

$old_users_id = [old('user_id')];
$old_value_users = User::whereIn('id', $old_users_id)->get();

如果我用$old_users_id = [1,2,3], 替换$old_users_id = [old('user_id')],它就像一个魅力。我有dd(old('user_id')),它确实是一个数组,所以我不明白什么是打嗝!

【问题讨论】:

  • 你能把dd(old('user_id'))的数据也加在这里吗
  • [[“3”、“4”、“5”、“6”、“7”、“9”、“10”、“12”]]
  • 这只是选项中用户 id 值的数组。
  • 它不是一个数组。它是一个数组或数组。看到有 [[]] 。您需要在打开右括号时删除
  • 应该是这样的[ "3", "4", "5", "6", "7", "9", "10", "12" ]

标签: mysql laravel


【解决方案1】:

由于old('user_id') 是一个数组,你不应该把它放在一个数组中。试试这个;

如果 old('user_id') 为空,则应提供一个空数组。

$old_users_id = old('user_id')?old('user_id'):[];
$old_value_users = User::whereIn('id', $old_users_id)->get();

+点

如果您要向查询中添加大量整数绑定,请尝试使用whereIntegerInRaw 而不是whereIn。更多信息请查看documentation

【讨论】:

  • 如果我尝试不使用 [],我会收到此错误:传递给 Illuminate\Database\Query\Builder::cleanBindings() 的参数 1 必须是数组类型,给定 null,在 E 中调用: \laravel\meetings-5.8\vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php 在第 870 行
  • 我想 whereIn 中的某些东西不会将其视为没有 [] 的数组,但问题是当我将它包裹在方括号中时,它只会从数组中获得第一个结果,而不是全部!
  • 好的,我编辑了我的答案,考虑到旧值可能为空。
  • 上面的代码可以像这样缩短User::whereIn('id', old('user_id') ?? [])-&gt;get();
【解决方案2】:

类似的东西

<select class="custom-select chosen-select {{ $errors -> has('add_project_owner') ? 'is-invalid' : '' }}" name="add_project_owner[]" id="add_project_owner" multiple>
    <option value="">choose</option>
    @foreach ($owners as $owner)
       <option value="{{ $owner -> emp_name }}" {{ (collect(old('add_project_owner'))->contains($owner -> emp_name)) ? 'selected' : '' }}>{{ $owner -> emp_name }}</option> 
    @endforeach
</select>

【讨论】:

  • 这对我无效,因为第二个多选选项为空,它必须保留已通过 post 处理的旧 user_id。
  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 2021-12-18
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
相关资源
最近更新 更多