首页 > 解决方案 > Laravel 数据库关系不起作用

问题描述

我在这里做错了什么?

我的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房产?

标签: phpmysqllaraveleloquent

解决方案


尝试像这样更新您的外键列定义:

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

此外,要访问您需要加载它的关系。所以作为对此的回答

为什么我没有得到 categoria 属性?

您可以使用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"
}

推荐阅读