Ресурс API Laravel 5.6 не показывает данные об отношениях

Я хочу получить данные отношений в JSON с помощью Resource в Laravel 5.6

Когда я запрашиваю, я получаю response.data.created_by как объект. (первые данные отмечены в окошке) (мне нужна такая функциональность с использованием ресурсов API)
Но с ресурсами API это только показывает id и не "created_by" object в response.response.data.created_by, (вторые данные отмечены в поле)

* Разница в данных отмечена внутри поля.
* Данные извлекаются с помощью нетерпеливого извлечения.

URL: http://localhost:8000/api/product/unit
Отклик:

    {
        "данные": [
            {
                "id": 1,
                "единица измерения": "Метр",
                "символ": "м",
                "десятичный": 1,
                +----------------------------------------------------------------------------------+
                |"creation_by": {                                                                   |
                |    "id": 1,                                                                      |
                |    "имя": "Админ", |
                | "электронная почта": "admin@gmail.com",                                                   |
                |    "api_token": "$2y$10$.c7eJGS6x/C8JN9Hd.Qc1OgPUS8txMDuIHjZNBRRlHQVGrYbJcC5u",  |
                |    "creation_at": "2018-05-09 15:45:59",                                          |
                |    "updated_at": "2018-06-08 15:38:41"                                           |
                |},                                                                                |
                +----------------------------------------------------------------------------------+
                "updated_by": {
                    "id": 1,
                    "имя": "Админ",
                    "электронная почта": "admin@gmail.com",
                    "api_token": "$2y$10$.c7eJGS6x/C8JN9Hd.Qc1OgPUS8txMDuIHjZNBRRlHQVGrYbJcC5u",
                    "creat_at": "2018-05-09 15:45:59",
                    "updated_at": "2018-06-08 15:38:41"
                },
                "creation_at": "2018-06-19 00:38:54",
                "updated_at": "2018-06-19 20:00:16"
            }
        ],
        "ресурс": {
            "данные": [
                {
                    "id": 1,
                    "единица измерения": "Метр",
                    "символ": "м",
                    "десятичный": 1,
                    +----------------+
                    |"создалБи": 1, |
                    + ---------------- +
                    "updatedBy": 1,
                    "создан в": {
                        "дата": "2018-06-19 00:38:54.000000",
                        "timezone_type": 3,
                        "часовой пояс": "Азия / Калькутта"
                    },
                    "updatedAt": {
                        "дата": "2018-06-19 20:00:16.000000",
                        "timezone_type": 3,
                        "часовой пояс": "Азия / Калькутта"
                    }
                }
            ]
        }
    }

UnitController.php:

    namespace App \ Http \ Controllers \ Product; используйте App\Models\Product\Unit; использовать Illuminate\Http\Request; использовать App\Http\Controllers\Controller; используйте Освещение \ Поддержка \ Фасады \ Валидатор;
    use App\Http\Resources\Product\UnitResourceCollection; используйте App\Http\Resources\Product\UnitResource; использовать Illuminate\Validation\ValidationException; класс UnitController extends Controller {
        public function index()
        {
            $units = Unit::with(['made_by', 'updated_by'])->get();
            +------------------------------------------------------+
            | возврат [                                              |
            |    'data' => $ единиц,                                 |
            |    'resource' => new UnitResourceCollection($units)  |
            |];                                                    |
            +------------------------------------------------------+
        }
    }

Модель блока:

    Пространство имен App\Models\Product;
    использовать Illuminate\Database\Eloquent\Model;
    Модуль класса расширяет модель
    {
        публичная функция creation_by() {
            return $this-> ownTo('App\User', 'creation_by', 'id');
        }

        публичная функция updated_by() {
            return $this-> ownTo ("App \ User", "updated_by", "id");
        }
    }
    
UnitResource.php
<pre>
namespace App\Http\Resources\Product;

use App\Http\Resources\UserResource;
use Illuminate\Http\Resources\Json\JsonResource;

class UnitResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'unit' => $this->unit,
            'symbol' => $this->symbol,
            'decimal' => $this->decimal,
            'createdBy' => $this->created_by,
            'updatedBy' => $this->updated_by,
            'createdAt' => $this->created_at,
            'updatedAt' => $this->updated_at
        ];
    }
}

1 ответ

Проблема была в модульной модели: мне пришлось использовать другое имя метода created_by() чем имя столбца created_by,

После изменения следующего кода он работает:

Unit.php Модель:

public function created_by() { -> public function createdby() {

public function updated_by() { -> public function updatedby() {


UnitController.php контроллер:

$units = Unit::with(['created_by', 'updated_by'])->get(); -> $units = Unit::with(['createdby', 'updatedby'])->get();


UnitResource.php Ресурс:

'createdBy' => $this->created_by, -> 'createdBy' =>new UserResource($this->createdby),

'updatedBy' => $this->updated_by, -> 'updatedBy' => new UserResource($this->updatedby),

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