Laravel, как извлечь данные внутренней коллекции к родителю - PullRequest
0 голосов
/ 25 октября 2019

У меня есть следующие модели: у пользователя есть сотрудники, а сотрудник - это тип человека. Если я пытаюсь получить данные о сотрудниках и сотрудниках пользователя в контроллере, я набираю: auth () -> user () -> employee () -> with ('self') -> get () Пример: UserКласс

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use Notifiable, HasApiTokens;

    public function employees()
    {
        return $this->hasMany(Employee::class, 'owner_id');
    }
}

Класс сотрудника


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{
    protected $guarded = ['id'];

    public function self()
    {
        return $this->hasOne(Person::class, 'id', 'person_id');
    }

    public function owner()
    {
        return $this->belongsTo(User::class);
    }
}


Персона Класс

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
    protected $guarded = ['id'];

    public function owner()
    {
        return $this->belongsTo(User::class);
    }
}

[
{
        "id": 1,
        "type": "per_day",
        "description": null,
        "salary": "7082.00",
        "self": {
            "name": "Ali",
            "phone": "0523037298",
            "email": "schaefer.dayton@hotmail.com"
        }
    }
]

Я хочу извлечь данные из себя в родителя, как:

[
{
        "id": 1,
        "type": "per_day",
        "description": null,
        "salary": "7082.00",
        "name": "Ali",
        "phone": "0523037298",
        "email": "schaefer.dayton@hotmail.com"
    }
]

1 Ответ

0 голосов
/ 25 октября 2019

Возможно, вы могли бы использовать метод слияния коллекций, которые вы возвращаете из запроса Eloquent. Примерно так:


$user->merge($user->self)->all()

Возможно, вам придется немного поиграть с этим, поэтому вот документация по методу:

https://laravel.com/docs/6.x/collections#method-merge

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