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

如何在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

对不起,我的英语不好,我想在我的对象中得到一行。我想要随机的顺序。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 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>,现在开始工作。