Funkcja do konwersji na tablicę

0

Czy istnieje w laravel gotowa funkcja, która przekonwertuje dane z modelu na tablice tak, żeby można było to dać do funkcji implode() i wynik będzie taki

('2012-07-01',2012-07-02','2012-07-25')

Bo mam zapytanie które pobierze mi rekordy (daty) i da do innego zapytanie w where te daty

Ja u siebie to wykonuje w taki sposób, że pobiera rekordy za pomocą modelu

return self::selectRaw(DB::Raw("(DATE(IF(HOUR(moods.date_start) >= '" . $startDay . "', moods.date_start,Date_add(moods.date_start, INTERVAL - 1 DAY) )) ) as dat"))
    ->where("type","sleep")
    ->where("id_users",$idUsers)
    ->whereRaw("time(moods.date_end) <  '12:20:20' ")
    ->whereRaw("time(moods.date_end) >  '05:00:20' ")
    ->where(function ($query) use ($data) {
        if (isset($data["dateFrom"])) {
            $query->where("moods.date_start",">=",$data["dateFrom"] );
        }
        if (isset($data["dateTo"])) {
            $query->where("moods.date_end","<",$data["dateTo"]);
        }
        
        if (isset($data["longSleepHourFrom"])) {
            $query->whereRaw("(  ( unix_timestamp(date_end) - unix_timestamp(date_start) ) / 3600 ) >= " . $data["longSleepHourFrom"]);
        }
        if (isset($data["longSleepHourTo"])) {
            $query->whereRaw("(  ( unix_timestamp(date_end) - unix_timestamp(date_start) ) / 3600 ) < " . $data["longSleepHourTo"]);
        }
        
        if (isset($data["longSleepMinuteFrom"])) {
            $query->whereRaw("(  ( unix_timestamp(date_end) - unix_timestamp(date_start) ) / 60 ) >= " . $data["longSleepMinuteFrom"]);
        }
        if (isset($data["longSleepMinuteTo"])) {
            $query->whereRaw("(  ( unix_timestamp(date_end) - unix_timestamp(date_start) ) / 60 ) < " . $data["longSleepMinuteTo"]);
        }
        })
        ->get()->all();

i teraz w kontenerze mam taki kod

$array = Mood::selectLastSleep($data, Auth::User()->start_day, Auth::User()->id);

$text =  implode("','",($array));
$text = "('" . $text . "')";

print $text;

Tylko, że mam daty w takim formacie

('{"dat":"2021-10-12"}','{"dat":"2021-12-21"}','{"dat":"2022-04-10"}','{"dat":"2022-04-11"}','{"dat":"2022-04-12"}','{"dat":"2022-06-10"}','{"dat":"2022-06-21"}','{"dat":"2022-06-28"}','{"dat":"2022-08-20"}','{"dat":"2022-09-29"}','{"dat":"2022-11-05"}')

A ja chcę mieć w ('2012-07-01',2012-07-02','2012-07-25') i czy jest jakaś procedura, która to wykona szybko ?

1

jak dajesz get() to nie używaj już all bo to do niczego nie jest potrzebne to raz, a dwa to co potrzebujesz osiągniesz stosując pluck i możesz go użyć zamiast get https://laravel.com/docs/10.x/collections#method-pluck

implode("','", Model::where(...)->pluck('dat')->toArray());

Edit: jest jeszcze inna wersja:

 Model::where(...)->get()->implode('dat', "','");

1 użytkowników online, w tym zalogowanych: 0, gości: 1