LARAVEL: добавить ключ и значение в одном массиве - PullRequest
0 голосов
/ 05 июля 2018

У меня есть один массив данных, я хочу добавить ключ и его значение в том же массиве. Здесь в addedPost я хочу добавить ключ favouritePost, и его значение равно $favouritePost после ключа product. Как я могу это сделать?

Вот мой запрос:

$addedPost      =   Post::with(['product','postattribute.attribute.category','user.userDetails'])
                ->whereId($postData['post_id'])
                ->first();
    $favouritePost  = PostFavourite::isAlreadyAdded($postData['post_id'], Auth::id());

    return  [
       'status_code'     =>    $status_code,
       'message'         =>    $message,
       'PostDetails'     =>    $addedPost
    ];

Что я получу в ответ:

{
"PostDetails": {
    "id": 289,
    "user_id": 12,
    "product_id": 2,
    "demand_or_supply": "Demand",
    "description": "edited1",
    "status": "Expired",
    "created_at": "2018-06-22 07:35:27",
    "updated_at": "2018-07-05 06:42:56",
    "product": {
        "id": 2,
        "title": "Diamond",
        "icon": null,
        "status": "Active"
    } 
}
}

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:

{
"PostDetails": {
    "id": 289,
    "user_id": 12,
    "product_id": 2,
    "demand_or_supply": "Demand",
    "description": "edited1",
    "status": "Expired",
    "created_at": "2018-06-22 07:35:27",
    "updated_at": "2018-07-05 06:42:56",
    "product": {
        "id": 2,
        "title": "Diamond",
        "icon": null,
        "status": "Active"
    },
    "favouritepost": {
         "id": 8,
         "post_id": 289,
         "user_id": 12
    }  
}
}

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Первый: ваш $addedPost - это не массив, а Eloquent Collection. Есть несколько возможностей сделать это. Самый простой - объединить массив с коллекцией.

$union = $addedPost->union($favouritePost->toArray());

Для любого другого решения, пожалуйста, посмотрите документацию Laravel. Это довольно легко понять.

https://laravel.com/docs/5.6/collections

Edit: хотя я пропустил ->first() внутри вопроса, просто используйте решение, уже упомянутое. ->first() возвращает объект StdClass, поэтому вы можете обрабатывать его следующим образом:

$addedPost->favouritepost = $favouritePost;

В этом случае это свойство favouritePost добавляется к объекту $ AddedPost. Больше нет необходимости в каком-либо вызове метода.

0 голосов
/ 05 июля 2018

Предполагая, что $addedPost - это коллекция laravel, вы можете просто сделать:

$addedPost = Post::with(['product','postattribute.attribute.category','user.userDetails'])
            ->whereId($postData['post_id'])
            ->first();
$favouritePost  = PostFavourite::isAlreadyAdded($postData['post_id'], Auth::id());

$addedPost->put('favouritepost', $favouritePost);

return  [
   'status_code'     =>    $status_code,
   'message'         =>    $message,
   'PostDetails'     =>    $addedPost
];
0 голосов
/ 05 июля 2018

сначала вы сохраняете все значения, которые вы возвращаете, в одном ассоциативном массиве, а затем используете array_push () для добавления нового ключа / значения в этот массив. В конце концов вы просто возвращаете этот массив.

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