php - 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
房产?
解决方案
尝试像这样更新您的外键列定义:
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"
}
推荐阅读
- python - Pycharm 无法检测 django 频道
- elasticsearch - Elastic Search 如何选择列并通过过滤器?
- python - 对按一列分组并取决于其他列值的数据框列中的所有值求和
- android - 无法在 Play 商店中将已签名的 APK 投入生产。Andorid App Bundle 的问题
- java - 如何在 Recyclerview SelectionTracker 上正确设置泛型?
- java - 如何解决 Java Collections.sort() 比较方法违反其一般约定异常
- c# - 努力获取已发布文件的 InputStream 的正确字符串表示形式
- r - 使用 Future 包在 R 中进行异步编程
- axios - this$store 函数未定义
- sql-server - 如何为查询中的批量插入中的所有行生成单个 GUID?