代码之家  ›  专栏  ›  技术社区  ›  MONSTEEEER

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

  •  1
  • MONSTEEEER  · 技术社区  · 6 年前

    对不起,我的英语不好,我想在我的对象中得到一行。我想要随机排列。即时通讯使用 array_rand() 仅返回如下错误:

    错误异常:array_rand()要求参数1为array,文件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_list 哪个是 object 而不是 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);
    

    但仍然不起作用。

    我错过了什么?

    5 回复  |  直到 6 年前
        1
  •  2
  •   Kapitan Teemo    6 年前

    尝试此方法:

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

    此方法更有效,因为您只能从 my_list 不像你用的时候 $course->my_list->random() 它检索所有数据并从中选择一个随机行。

        2
  •  1
  •   Pablo    6 年前

    这个 Object 是Laravel系列。请参阅收集文档。 https://laravel.com/docs/5.7/collections#method-random

    你可以试试 $course->my_list->random()

        3
  •  1
  •   Mozammil    6 年前

    默认情况下,任何雄辩的查询都返回 Collection 即使对于底层关系。既然您使用的是一个,那么这应该是有效的:

    $course->my_list->random(); 
    

    这将只返回一个项目。如果需要更多,可以将参数传递给 random() 方法,指定所需项的计数。

    有关详细信息,请检查 documentation.

        4
  •  1
  •   Skywarth    6 年前

    如果你仍然想用你的方法来实现这一点,你能试着让object变量函数把对象转换成数组吗?

    $array = get_object_vars($object);
    

    这样,您就可以将它们用作数组随机中的数组。

    您可能会得到一个错误,因此它是一个多维数组。让我知道,这样我可以更新。

    多维更新:

    请参考这个。

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

    $array=json_解码(json_编码($object),真);

        5
  •  1
  •   Jinal Somaiya    6 年前

    试试这个:

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