Как установить Eloquent withDefault для некоторого условия, а не ноль, и установить значение по умолчанию из модального

Я создаю API в Laravel, чтобы получать все сообщения от их создателя.

У меня есть следующие таблицы —
сообщений
Я бы
заглавие
по убыванию
creator_id -> принадлежит идентификатору пользователя
CREATOR_NAME
type — ENUM (‘system’, ‘user’) «когда ‘system’, будет указано creator_name, иначе creator_id используется для получения имени из таблицы пользователей»

пользователи
Я бы
название
.
.

В laravel у нас есть Post и User Model.
Системные сообщения создаются администратором и предоставляется имя_создателя. Для системных сообщений мы хотим показать имя создателя из поля creator_name в таблице сообщений, а не данные администратора.

Каков наилучший способ достичь этого в Laravel?

Post Model -

class Post{
function creator(){
return $this->belongsTo('App\Models\User', 'creator_id');
}
}

Post Controller -

public function index()
{
$posts = Post::with('creator')->paginate();
$data = $posts->toArray();

foreach ($data['data'] as $key => &$value) {
if($value['type'] === 'system' && isset($value['creator'])){
$value['creator']['name'] = $value['creator_name'];
unset($value['type']);
unset($value['creator_name']);
}
}

return $this->sendResponse($data);
}




expected:
Posts -

[
{
"id": 1,
"title": "some title",
"desc": "some description",
"creator_name": NULL,
"creator_id": 123,
"creator": {
"id": 123,
"name": "John Doe",
},
"type": "user"},
{
"id": 2,
"title": "some other title",
"desc": "some other description",
"creator_name": "Jane Doe",
"creator_id": 12, // admin user
"creator": {
"name": "Jane Doe", // creator_name rather than details of admin user
},
"type": "system"}
]

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]