Как получить случайную строку в объектной переменной в Laravel? - PullRequest
0 голосов
/ 17 января 2019

Извините за мой плохой английский, я хочу получить одну строку в моем объекте. И я хочу это в случайном порядке. Я использую 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_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 ]

0 голосов
/ 17 января 2019

попробуйте это:

$course = Course::where('id', 1)
   ->with(['my_list' => function($query) {
       $query->inRandomOrder();
}])->first();
return $course->my_list;
0 голосов
/ 17 января 2019

Это Object - коллекция Laravel. Пожалуйста, обратитесь к документации коллекции. https://laravel.com/docs/5.7/collections#method-random

Вы можете попробовать $course->my_list->random()

0 голосов
/ 17 января 2019

Если вы все еще хотите сделать это с вашим подходом, можете попробовать функцию get_object_vars для приведения объекта в массив.

$array = get_object_vars($object);

, чтобы вы могли использовать их в качестве массива в array_rand.

Вы можете получить ошибку, следовательно, это многомерный массив. Дайте мне знать, чтобы я мог обновить.

Обновление для многомерного:

Пожалуйста, обратитесь к этому.

// Второй параметр json_decode принудительно разбирает ассоциативный массив

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

0 голосов
/ 17 января 2019

Попробуйте этот метод:

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

этот метод более эффективен, поскольку вы получите только 1 строку из my_list, что не так, как при использовании $course->my_list->random(), который извлекает все данные и оттуда выбирает случайную строку.

0 голосов
/ 17 января 2019

Любой запрос Eloquent возвращает по умолчанию Collection , даже для базовых отношений. Поскольку вы работаете с одним, это должно работать:

$course->my_list->random(); 

Это вернет только один предмет. Если вы хотите больше, вы можете передать аргумент методу random(), указав количество элементов, которое вы хотите.

Для получения дополнительной информации см. Документацию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...