Jak převést sloupce tabulky dat uvnitř výmluvný v laravel?

0

Otázka

Snažím se převést 'CHECKTIME' tabulka sloupec datetime řetězec za použití "JAKO" provozovatel v sql. LIKE operátor je nepodporuje datetaime datový typ. Takže, to musím převést na řetězec použít JAKO. Jak mohu dělat to v laravel výmluvný? Můj Kód v Regulátor:

$dailyData=CheckInOutModel::join('USERINFO', 'USERINFO.USERID', '=', 'CHECKINOUT.USERID')
            ->select('USERINFO.USERID as id','USERINFO.BADGENUMBER as bd', 'USERINFO.NAME as name','USERINFO.Image as photo','CHECKINOUT.*')
            ->where(CONVERT(VARCHAR(25),' CHECKINOUT.CHECKTIME'),'LIKE',$thisDay.'%')
            ->orderBy('CHECKINOUT.CHECKTIME','desc')->get();

SQL Dotaz, který práci vrátit data:

SELECT CHECKINOUT.CHECKTIME
FROM CHECKINOUT
JOIN USERINFO ON USERINFO.USERID=CHECKINOUT.USERID
WHERE  CONVERT(VARCHAR(25), CHECKINOUT.CHECKTIME, 126) LIKE  '2021-11-23%';
eloquent laravel sql sql-like
2021-11-23 18:35:54
1

Nejlepší odpověď

1

Za prvé, můžete použít whereRaw() (viz odkaz) metoda inject syrové SQL v dotazu.

To by bylo něco jako toto:

$dailyData=CheckInOutModel::join('USERINFO', 'USERINFO.USERID', '=', 'CHECKINOUT.USERID')
            ->select('USERINFO.USERID as id','USERINFO.BADGENUMBER as bd', 'USERINFO.NAME as name','USERINFO.Image as photo','CHECKINOUT.*')
            ->whereRaw('CONVERT(VARCHAR(25), CHECKINOUT.CHECKTIME) LIKE ?', $thisDay.'%')
            ->orderBy('CHECKINOUT.CHECKTIME','desc')->get();

Ale protože pracujete s daty, je doporučeno pro použití se datuje celou cestu, a ne převést data k porovnání řetězců. Další možností by bylo využití whereBetween přímo s daty. (viz odkaz)

Exemple :

$dailyData=CheckInOutModel::join('USERINFO', 'USERINFO.USERID', '=', 'CHECKINOUT.USERID')
            ->select('USERINFO.USERID as id','USERINFO.BADGENUMBER as bd', 'USERINFO.NAME as name','USERINFO.Image as photo','CHECKINOUT.*')
            ->whereBetween(
                'CHECKINOUT.CHECKTIME', 
                [
                    $thisDay, 
                    date('Y-m-d', strtotime('+1 day', $thisDay))
                ]
            )->orderBy('CHECKINOUT.CHECKTIME','desc')->get();

Mám přes členité kollmanová, vladislava sekci, aby to bylo jasné.

Oslovit v komentářích, pokud máte jakýkoliv problém nebo návrh na zlepšení :)

2021-11-24 08:26:53

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................