Как установить Eloquent withDefault при некоторых условиях, а не на ноль, и установить значение по умолчанию из модального - PullRequest
0 голосов
/ 29 декабря 2018

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

У меня есть следующие таблицы -
сообщений
id
title
desc
creator_id -> относится к идентификатору пользователя
имя-создателя
тип- ENUM ('system', 'user') ", когда 'system', имя_создателя будет дано, иначе будет использовано creator_id, получить имя из таблицы пользователей"

users
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"
    }
]
...