Laravel 5.5. Включить таблицу отношений в json

Я пытаюсь включить таблицу соединений в свой возврат json с laravel 5.5 с dingo.

У меня такая строчка: return $this->model->where("id_user", " = ", $user_id)->with('typeSpeciality')->get();

И я получил такой результат, таблица специальностей не включена

{
    "surname": "Robert",
    "first_name": "Lavoie",
    "speciality_id": 1,
    "email": "eyJpdiI6ImdkUUtqeUFOc0REdmQ0WUF4VUsyTXc9PSIsInZhbHVlIjoiYWFqNXFRQ3JqUmZGRWRnU1BOTVFxam5OSHQrYUVaNE5jNGNnejhTbDdhYz0iLCJtYWMiOiJhZDhkYzc5NzVmYTE4YzNjNjE2N2JkYTFlZWM3MzNkNjU0YTE2OTcxY2JlMjc0NzZlODE4OGI2NWFiNDVkMTg5In0 = ",
    "practice_number": "1111",
    "gender": "M",
    "sms_phone_number": null,
    "created_at": "2012-04-25 18:13:10",
    "role_id": 6,
    "auto_accept": 0
}

специальная таблица не включена в мой json ... я хочу что-то вроде этого

{
    "surname": "Robert",
    "first_name": "Lavoie",
    "speciality": {
                    "name": "sometext",
                    "title": "sometext",
                   }
    "email": "eyJpdiI6ImdkUUtqeUFOc0REdmQ0WUF4VUsyTXc9PSIsInZhbHVlIjoiYWFqNXFRQ3JqUmZGRWRnU1BOTVFxam5OSHQrYUVaNE5jNGNnejhTbDdhYz0iLCJtYWMiOiJhZDhkYzc5NzVmYTE4YzNjNjE2N2JkYTFlZWM3MzNkNjU0YTE2OTcxY2JlMjc0NzZlODE4OGI2NWFiNDVkMTg5In0 = ",
    "practice_number": "1111",
    "gender": "M",
    "sms_phone_number": null,
    "created_at": "2012-04-25 18:13:10",
    "role_id": 6,
    "auto_accept": 0
}

Моя функция отношений

   public function typeSpeciality()
{
    return $this->hasOne('App\Models\TypeSpeciality', "speciality_id","speciality_id");
}

Как лучше всего это сделать?

Вы можете более четко сформулировать свой вопрос? возвращает ли он в данный момент таблицу специальностей?

pseudoanime 31.07.2018 16:25

Нет, в моем возвращении отображается только "speciality_id": 1

Kevin Houde 31.07.2018 16:34

Вы определили первичный ключ в таблице специализации типов

NanThiyagan 31.07.2018 16:40

Что это показывает, когда вы возвращаете $ this-> model-> where ("id_user", " = ", $ user_id) -> first () -> typeSpeciality; Я пытаюсь понять, правильно ли вы наладили отношения. Есть ли в вашей специальной таблице поле speciality_id?

pseudoanime 31.07.2018 16:41

@pseudoanime Да, в моей специальной таблице есть поле с именем speciality_id

Kevin Houde 31.07.2018 16:50

@KevinHoude я добавил ответ, попробуйте его реализовать

rkj 31.07.2018 16:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
6
539
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Лучший способ получить json-ответ от модели - использовать красноречивые ресурсы. Взгляните на laravel docs красноречивых ресурсов. Они также объясняют, как вы можете добавить отношения к ресурсу.

Измените свои отношения с hasOne на belongsTo вот так

public function typeSpeciality()
{
    return $this->belongsTo('App\Models\TypeSpeciality', "speciality_id","speciality_id");
}
Ответ принят как подходящий

Вы можете получить то, что хотите, используя Красноречивый: ресурсы API:

Вам необходимо создать пользователя (при условии, что другая модель - это пользователь) и ресурс TypeSpeciality:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class TypeSpeciality extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'name' => $this->name,
            'title' => $this->title
        ];
    }
}

Затем пользовательский ресурс:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\TypeSpeciality as TypeSpecialityResource;

class User extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'surname' => $this->surname,
            'first_name' => $this->first_name,
            'speciality' => new TypeSpecialityResource($this->typeSpeciality),
            // and the other fields here.
        ];
    }
}

Наконец, в контроллере вы можете сделать это:

use App\Http\Resources\User as UserResource;

function YourMethod() {
    $models = $this->model->where("id_user", " = ", $user_id)
                             ->with('typeSpeciality')
                             ->get();
    return UserResource::collection($models);
}

Другие вопросы по теме