Я создаю 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"}
]
Задача ещё не решена.
Других решений пока нет …