Как извлечь день, месяц и год из даты? - PullRequest
1 голос
/ 13 января 2020

Я просто не могу понять, как получить день, месяцы и год из дат.

Вот это красноречивое

 public function query(Detail $model)
    {
    return $model->newQuery()->leftjoin('fishers','fishers.id', '=','details.fisher_id')
    ->leftjoin('species','species.id', '=', 'details.species_id')
    ->leftjoin('purposes','purposes.id', '=', 'details.purpose_id')
    ->leftjoin('islands','islands.id', '=', 'fishers.island_id')
    ->leftjoin('preservations','preservations.id', '=', 'details.preservation_id')   
    ->select('fishers.*','details.*','details.indate','islands.island_name','fishers.fisher_first_name','fishers.fisher_last_name','details.weight','species.species_name','purposes.purpose_name','preservations.preservation_name');
   }

Я пытался использовать Month(details.indate) as Month, Year(details.indate) as Year но, кажется, не работает. Я использовал дату как тип данных для indate, и когда я делаю Month(details.indate) as Month, я получаю эту ошибку:

SQLSTATE [42S22]: КОЛОННА НЕ НАЙДЕНА: 1054 НЕИЗВЕСТНАЯ КОЛОННА 'Месяц (details.indate) 'IN' список полей '(SQL: ВЫБРАТЬ рыбаков. *, Подробности. *, МЕСЯЦ (подробности. Указывать) КАК МЕСЯЦ

Это мои столбцы с данными

   protected function getColumns()
    {
        return [
            [ 'data' => 'purpose_name', 'name' => 'purposes.purpose_name', 'title' => 'Purpose' ],
            [ 'data' => 'fisher_first_name', 'name' => 'fishers.fisher_first_name', 'title' => 'Fisher Name' ],
            [ 'data' => 'preservation_name', 'name' => 'preservations.preservation_name', 'title' => 'Preservation Methods' ],
            [ 'data' => 'species_name', 'name' => 'species.species_name', 'title' => 'Species Name' ],
            [ 'data' => 'island_name', 'name' => 'islands.island_name', 'title' => 'Island Name' ],
            [ 'data' => 'weight', 'name' => 'details.weight', 'title' => 'Weight' ],
            [ 'data' => 'indate', 'name' => 'details.indate', 'title' => 'Month' ],
            [ 'data' => 'indate', 'name' => 'details.indate', 'title' => 'Year' ],

        ];
    }

может кто-нибудь помочь мне, как это сделать?

1 Ответ

0 голосов
/ 13 января 2020

Вам необходимо использовать функцию DB::raw для выбора выражений, используя Laravel Eloquent.

Например:

return $model->newQuery()->...
->select(DB::raw('Month(details.indate) as Month'), DB::raw('Year(details.indate) as Year'), 'fishers.*','details.*', ...)

Обязательно добавьте use DB; вверху вашего файла.

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