如何在Laravel中获取对象变量中的随机行?
对不起,我的英语不好,我想在我的对象中得到一行。我想要随机的顺序。Im使用的是如何在Laravel中获取对象变量中的随机行?,laravel,object,Laravel,Object,对不起,我的英语不好,我想在我的对象中得到一行。我想要随机的顺序。Im使用的是array\u rand(),它只返回如下所述的错误: ErrorException:array_rand()希望参数1是数组,对象在文件C:\xampp\htdocs\user\TestProject\app\Http\Controllers\TestController.php中在线给定 这是我的目标 "my_list": [ { "id": 1, "name": "My Name Tes
array\u 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_列表
中获得一行,它是对象
,而不是数组
这是我的密码
$course = Course::where('id', 1)->with('my_list')->first();
$random_list = array_rand($course->my_list);
return $random_list;
我还尝试像这样在数组中添加行数
$random_list = array_rand($course->my_list, 1);
但仍然不起作用
我遗漏了什么?任何有说服力的查询在默认情况下都会返回a,甚至对于底层关系也是如此。由于您正在使用一个,这应该可以:
$course->my_list->random();
这将只返回一个项目。如果需要更多,可以将一个参数传递给random()
方法,指定所需项目的计数
有关更多信息,请检查任何雄辩的查询返回,默认情况下为a,即使对于基础关系也是如此。由于您正在使用一个,这应该可以:
$course->my_list->random();
这将只返回一个项目。如果需要更多,可以将一个参数传递给random()
方法,指定所需项目的计数
有关更多信息,请查看,如果您仍然想使用您的方法执行此操作,可以尝试获取_object_vars函数将对象强制转换到数组中
$array = get_object_vars($object);
这样,您就可以将它们用作array_rand中的数组
您可能会得到一个错误,因此它是一个多维数组。让我知道,以便我可以更新
多维数据库的更新:
请参考这个
//json_decode的第二个参数强制解析为关联数组
$array=json_decode(json_encode($object),true) 若你们仍然想用你们的方法来实现这一点,你们可以试着让_object_vars函数将对象强制转换到数组中
$array = get_object_vars($object);
这样,您就可以将它们用作array_rand中的数组
您可能会得到一个错误,因此它是一个多维数组。让我知道,以便我可以更新
多维数据库的更新:
请参考这个
//json_decode的第二个参数强制解析为关联数组
$array=json_decode(json_encode($object),true) 试试这个方法:
$course = Course::where('id', 1)
->with(['my_list' => function($query) {
$query->inRandomOrder()->first();
}])->first();
return $course->my_list;
此方法效率更高,因为您只能从my_list
中获取一行,这与使用$course->my_list->random()
检索所有数据并从中选择随机行不同。尝试此方法:
$course = Course::where('id', 1)
->with(['my_list' => function($query) {
$query->inRandomOrder()->first();
}])->first();
return $course->my_list;
这种方法效率更高,因为您只能从my_list
中获得一行,而不像使用$course->my_list->random()
检索所有数据并从中选择随机行。此对象
是一个Laravel集合。请参阅收集文档。
您可以尝试$course->my_list->random()
此对象是一个Laravel集合。请参阅收集文档。
您可以尝试$course->my_list->random()
尝试以下方法:
$course = Course::where('id', 1)
->with(['my_list' => function($query) {
$query->inRandomOrder();
}])->first();
return $course->my_list;
试试这个:
$course = Course::where('id', 1)
->with(['my_list' => function($query) {
$query->inRandomOrder();
}])->first();
return $course->my_list;
ps:number=要获取的元素数
ps:number=您要获取的元素数,这也是@Mozammil先生的答案,尝试了但没有效果。这也是@Mozammil先生的答案,尝试了但没有效果。更新了我的答案。你能告诉我它不起作用的原因吗。有任何错误被抛出吗?更新了我的答案。你能告诉我它不起作用的原因吗。是否抛出任何错误?它返回my_列表中的所有行,不管我如何添加->first()
在$query->inRandomOrder()->first()
中,现在开始工作。它返回我的列表中的所有行,不管我添加了->first()在$query->inRandomOrder()->first()
中的code>,现在开始工作。