Laravel отношения с базой данных не работают - PullRequest
0 голосов
/ 18 февраля 2020

Что я здесь не так делаю?

Мой entradas стол:

Schema::create('entradas', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('categoria_id');
            $table->string('descricao', 200);
            $table->double('valor');
            $table->timestamps();
        });

Мой categorias стол:

Schema::create('categorias', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('titulo', 100);
            $table->enum('tipo', ['debito', 'credito']);
            $table->timestamps();
        });

Мой Entrada модель:

public function categoria()
    {
        return $this->belongsTo('App\Categoria');
    }

Моя Categoria модель:

public function entradas()
    {
        return $this->hasMany('App\Entrada');
    }

Возвращая это на моем EntradaController:

public function index() {
        return(Entrada::find(1));
    }

Я получаю следующий результат:

{
    "id": 1,
    "categoria_id": 3,
    "descricao": "Distinctio minus praesentium quia ea voluptatem pariatur et. Tenetur maiores mollitia molestias asperiores. Exercitationem maiores voluptas id dolore rerum unde. Ipsum dolorem facere aut ut quos.",
    "valor": 108,
    "created_at": "2020-02-17 17:49:36",
    "updated_at": "2020-02-17 17:49:36"
}

Почему бы мне не получить свойство categoria?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2020

Попробуйте обновить определение столбца внешнего ключа следующим образом:

Schema::create('entradas', function (Blueprint $table) {
    // ...
    $table->bigInteger('categoria_id')->unsigned();
    //                                ^^^^^^^^^^^^^
    // You could also do:
    // $table->unsignedBigInteger('categoria_id');
    // ...
});

Кроме того, для доступа к связи вам необходимо загрузить его. Таким образом, в качестве ответа на это

Почему бы мне не получить свойство категорий?

Вы можете использовать Eager Loading :

public function index()
{
    return Entrada::with('categoria')->find(1);
}  //               ^^^^^^^^^^^^^^^^

Это должно дать вам ожидаемое json:

{
    "id": 1,
    "categoria_id": 3,
    "descricao": "Distinctio minus praesentium quos.",
    "valor": 108,
    "categoria": {
        // ...
    },
    "created_at": "2020-02-17 17:49:36",
    "updated_at": "2020-02-17 17:49:36"
}
0 голосов
/ 18 февраля 2020

вы должны использовать отношения

public function index()
{
    return Entrada::with('categoria')->find(1);
}
0 голосов
/ 18 февраля 2020

Вы должны загрузить ваше свойство категорий, чтобы получить его, например:

public function index () {
    return Entrada::with('categoria')->find(1);
}

Более подробная информация в документах здесь

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