Jak mogę uzyskać dane o każdej wartości w tablicy. Chcę tylko 1 wynik z obu wartości.

$userBikes = array('862549040389788','12345');


$data = DB::table('geolocation')
->whereIn('Imei',$userBikes)
->take(1)      
->get();

Wynik:

["28.537857", "77.269325", "862549040389788"]

Ale spodziewam się takiego wyniku:

["28.537857", "77.269325", "862549040389788"]
["28.537857", "77.269325", "12345"]
1
Gaurav 3 kwiecień 2020, 16:22

3 odpowiedzi

Najlepsza odpowiedź

Na podstawie twoich komentarzy myślę, że chcesz grupować według zapytania.

$userBikes = array('862549040389788','12345');

$data = DB::table('geolocation')
->whereIn('Imei', $userBikes)
->groupBy('Imei')
->selectRaw('any_value(id) as id, any_value(Lat) as Lat, any_value(Lng) as Lng, any_value(created_at) as created_at, Imei')
->get();
1
TsaiKoga 3 kwiecień 2020, 14:15

Musisz wykonać 2 różne zapytania, jeśli chcesz mieć jedną wartość dla każdego elementu w tablicy $userBikes.

$userBikes = array('862549040389788','12345');
$output = array();


foreach($userBikes as $imei) { 
    $data = DB::table('geolocation')
       ->where('Imei',$imei)
       ->take(1)      
       ->get()->toArray();
    array_push($output, $data)
return $output;

Drugim rozwiązaniem jest usunięcie take(1) z zapytania i przefiltrowanie każdej wartości z obiektu danych.

1
shantanu 3 kwiecień 2020, 14:24

Musisz usunąć take(1) z zapytania.

Take (1) ograniczy wyniki do 1 wiersza.

Więc powinno być:

$data = DB::table('geolocation')
->whereIn('Imei',$userBikes)      
->get();
-1
Diogo Gomes 3 kwiecień 2020, 13:32