如何在Laravel中的对象变量中获取随机行?

时间:2019-01-17 06:09:23

标签: laravel object

对不起,我的英语不好,我想在对象中输入一行。我想要按随机顺序排列。我正在使用array_rand(),它只返回如下错误:

  

ErrorException:array_rand()期望参数1为数组,对象在文件C:\ xampp \ htdocs \ user \ TestProject \ app \ Http \ Controllers \ TestController.php中给出

这是我的对象。

"my_list": [
   {
     "id": 1,
     "name": "My Name Test",
     "address": [
         {
            "id": 1,
            "city": "Manila",
            "country": "Philippines" 
         }
     ]
   },
   {
     "id": 2,
     "name": "Your Name Test",
     "address": [
         {
            "id": 2,
            "city": "Cebu",
            "country": "Philippines",
         }
     ]
   }
]

问题是我只想向my_listobject而不是array一行。

这是我的代码。

$course = Course::where('id', 1)->with('my_list')->first();
$random_list = array_rand($course->my_list);
return $random_list;

我还尝试像这样在array_rand中添加行数。

$random_list = array_rand($course->my_list, 1);

但仍然无法正常工作。

我错过了什么?

6 个答案:

答案 0 :(得分:2)

尝试此方法:

$course = Course::where('id', 1)
   ->with(['my_list' => function($query) {
       $query->inRandomOrder()->first();
   }])->first();
return $course->my_list;

此方法效率更高,因为您只会从my_list获得1行,这与使用$course->my_list->random()检索所有数据并从那里选择随机行的情况不同。

答案 1 :(得分:1)

任何雄辩的查询默认情况下都会返回Collection,即使对于基础关系也是如此。由于您正在使用一个,因此应该可以:

 private void showStateList(List<State> states) {
        if (states != null) {
            this.lstStates = states;
            if(stateAdapter == null){
                LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
                linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                stateFragmentBinding.stateRecyclerView.setLayoutManager(linearLayoutManager);

                stateFragmentBinding.stateRecyclerView.addItemDecoration(new DividerItemDecoration(stateFragmentBinding.stateRecyclerView.getContext(),
                        linearLayoutManager.getOrientation()));
                stateFragmentBinding.stateRecyclerView.setHasFixedSize(true);

                stateAdapter = new StateAdapter(lstStates, this);
                stateFragmentBinding.stateRecyclerView.setAdapter(stateAdapter);
            }
            else{
                stateAdapter.notifyDataSetChanged(lstStates);
            }
        }

    }

这将仅返回一项。如果需要更多,可以将参数传递给 class StateAdapter extends RecyclerView.Adapter<StateViewHolder> { private LayoutInflater inflater; private StateClickListener stateClickListener; private List<State> lstStateItem; public StateAdapter(List<State> lstStateItem, StateClickListener stateClickListener) { this.lstStateItem = lstStateItem; this.stateClickListener = stateClickListener; } @NonNull @Override public StateViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) { if (inflater == null) inflater = LayoutInflater.from(viewGroup.getContext()); StateAdapterBinding stateAdapterBinding = StateAdapterBinding.inflate(inflater, viewGroup, false); return new StateViewHolder(stateAdapterBinding, stateClickListener); } @Override public void onBindViewHolder(@NonNull StateViewHolder stateViewHolder, int position) { State state = lstStateItem.get(position); stateViewHolder.bind(state, position); } @Override public int getItemCount() { return lstStateItem.size(); } public void notifyDataSetChanged(List<State> states) { List<State> tempList = new ArrayList<>(states); lstStateItem.clear(); lstStateItem.addAll(tempList); this.notifyDataSetChanged(); } } 方法,以指定所需的项目数。

有关更多信息,请检查documentation.

答案 2 :(得分:1)

如果您仍然想使用此方法,可以尝试使用get_object_vars函数将对象转换为数组。

$array = get_object_vars($object);

以便您可以将它们用作array_rand中的数组。

您可能会遇到错误,因此它是一个多维数组。让我知道,以便我进行更新。

针对多维更新:

请参阅此内容。

// json_decode的第二个参数强制解析为关联数组

$ array = json_decode(json_encode($ object),true);

答案 3 :(得分:1)

Object是Laravel集合。请参考收集文档。 https://laravel.com/docs/5.7/collections#method-random

您可以尝试$course->my_list->random()

答案 4 :(得分:1)

尝试一下:

$course = Course::where('id', 1)
   ->with(['my_list' => function($query) {
       $query->inRandomOrder();
}])->first();
return $course->my_list;

答案 5 :(得分:0)

pip install ta-lib

ps: number = 你想要获取的元素个数,