Использование whereIn с разными именами столбцов (красноречиво) - PullRequest
0 голосов
/ 18 июня 2020

У меня есть массив $toolIds, содержащий только tool_id, который я хочу использовать для выбора из таблицы tools, но имена столбцов не совпадают, и поэтому он не работает. Я читал в другом потоке, что это будет работать, если массив для сопоставления (toolsIds) будет содержать только один столбец, но это не так. Мой (не рабочий) код:

$tools = DB::table('tools')->select('id','title')
  ->whereIn('tool_id',$toolIds)
  ->get();

Результат JSON для двух массивов:

toolid: [{"tool_id":"1155"},{"tool_id":"1136"}]

tools: [{"id":"1155","title":"Shemar Zieme"},{"id":"1136","title":"Mr. Johnny Hagenes DDS"}]

Ответы [ 2 ]

1 голос
/ 18 июня 2020

В Laravel whereIn принимает только плоский массив без ключей. См. where clauses .

Вы должны pluck id в массиве $ toolIds, как показано ниже: (с array_pluck )

$toolIds = [
    ["tool_id"=>"1155"],
    ["tool_id"=>"1136"]
];

$plucked_ids = array_pluck($toolIds, 'tool_id'); // $plucked_ids = ["1155", "1136"];

$tools = DB::table('tools')->select('id','title')
  ->whereIn('id', $plucked_ids) // and we check tools.id column not tool_id.
  ->get();

0 голосов
/ 18 июня 2020

Вы можете использовать whereJsonContains для запроса JSON массивов

Следуйте laravel документации: , надеюсь, это будет полезно

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