Ну, во-первых, метод list()
должен быть частью вашего контроллера, а также вы должны использовать собственные обработчики отношений Laravel ... Посмотрите официальную документацию .
В любом случае, проблема в том, что переменная $cast
пытается преобразовать ваш результат запроса в Carbon
объект , а после этого отформатируйте результат в формате Y/m/d H:i:s
. Но ввод не является отметкой времени, это просто строка (потому что вы выполняете DATE_FORMAT(com_tasks.start_date, "%Y/%m/%d %H:%i:%s") as start_date
в вашем запросе). Вот почему возникает исключение.
Вы должны просто восстановить столбцы start_date
и due_date
, если хотите использовать атрибуты $cast
или $dates
. Ваш код станет:
$result = $this->select(
'com_tasks.id',
'com_tasks.name',
'com_tasks.done',
'com_task_status.id AS status_id',
'com_task_status.name AS status_name',
'com_task_status.color AS status_color',
'com_projects.name AS project_name',
'com_projects.name AS assignee_name',
'com_tasks.start_date AS start_date',
'com_tasks.due_date AS due_date',
)
->leftJoin('com_task_status', 'com_tasks.status_id', 'com_task_status.id')
->leftJoin('com_projects', 'com_tasks.project_id', 'com_projects.id');
$per_page = $params['per_page'] ?? config('pagination.per_page');
return $result->orderBy('id', 'DESC')->paginate($per_page);
Как я писал в начале, лучшее решение, во всяком случае, должно быть:
class Task extends Model
{
use SoftDeletes;
protected $table = 'com_tasks';
protected $dates = ['deleted_at', 'start_date', 'due_date'];
/**
* get list data
*
* @param $params
* @return array list com_tasks
*/
public function list($params=[])
{
$per_page = $params['per_page'] ?? config('pagination.per_page');
return $this->with(['taskStatus', 'project'])->orderBy('id', 'DESC')->paginate($per_page);
}
public function taskStatus()
{
return $this->belongsTo(TaskStatus::class);
}
public function project()
{
return $this->belongsTo(Project::class);
}
}
и в виде контроллера / блейда / любого вызоваметод форматирования, поскольку атрибуты deleted_at
, start_date
и due_date
создаются как Carbon
объекты.
// ... your code
$model->start_date->format('Y/m/d H:i:s');
// ... your blade view
{{ $model->start_date->format('Y/m/d H:i:s'); }}