Получить объект массива в таблице из другого идентификатора данных таблицы, используя ключ where в laravel - PullRequest
0 голосов
/ 10 апреля 2020

Вопрос: у меня есть две таблицы, как получить данные клиента, используя таблицу заказа user_id

  "order": [
    {
        "id": 1,
        "user_id": 4
    },
    {
        "id": 2,
        "user_id": 5
    }
  ],


  "customers": [
        {
            "id": 5,
            "name": "Mohamed Raazi",
            "phone": "777",
        }
    ],

Следующий код вернет только последний объект массива, я необходимо отобразить все объекты из пользовательской таблицы, используя условие where в таблице клиентов

        for ($x=0; $x<count($orders); $x++){
            $customer = User::where('id',$orders[$x]->user_id)->get(); 
        }

1 Ответ

0 голосов
/ 10 апреля 2020

Я бы использовал ::whereIn -метод, где вы можете предоставить массив идентификаторов и получить всех пользователей с предоставленными идентификаторами.

Сначала вам нужно будет переформатировать массив $orders, который вы иметь так, что он содержит только идентификаторы пользователей. Я предполагаю, что вы используете Eloquent для извлечения заказов, тогда вы можете использовать функцию pluck в своем выражении Eloquent:

$userIds = Order::where('statement', true)->pluck('user_id')->toArray();

Обратите внимание, что выражение where не является реальным, я просто хочу чтобы проиллюстрировать, как вы можете вызвать метод pluck.

Другая альтернатива состоит в том, что вы используете функцию map в коллекции $orders и возвращаете только идентификаторы пользователя:

$userIds = $orders->map(function ($order) {
    return $order->user_id;
});

Как только вы Имея свои идентификаторы пользователей в массиве / коллекции, вы можете использовать их в выражении whereIn:

$users = Users::whereIn('id', $userIds)->get();

Тогда это даст вам всех пользователей, которые связаны с заказами, которые есть в вашей коллекции заказов. .

...