Laravel 模型关系错误如何解决?
Posted
技术标签:
【中文标题】Laravel 模型关系错误如何解决?【英文标题】:Laravel Model relation error how to fix it? 【发布时间】:2022-01-14 05:15:39 【问题描述】:我有两个模型:Barang 和 Ruangan
在迁移巴朗:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateBarangTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('barang', function (Blueprint $table)
$table->id();
$table->string('nama');
$table->string('spesifikasi');
$table->foreignId('id_ruangan');
$table->string('kondisi');
$table->integer('jumlah');
$table->string('sumber_dana');
$table->string('jenis');
$table->string('keterangan');
$table->timestamps();
);
Schema::table('barang', function (Blueprint $table)
$table->foreign('id_ruangan')->references('id')->on('ruangan');
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('barang');
在迁徙时软干
<?php use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRuangansTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('ruangan', function (Blueprint $table)
$table->id();
$table->string('nama_ruangan');
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::dropIfExists('ruangans');
这是我的模特巴朗
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Barang extends Model
use HasFactory;
protected $table = "barang" ;
public function ruangan()
return $this->belongsTo(Ruangan::class);
当我在 tinker 上调用它时
$bar = new Barang
$bar = Barang::first()
$bar->ruangan->nama_ruangan
它返回 null ,
即使在数据库的每个表中我都添加了一些虚拟数据
我花了 3 个小时来解决它并没有找到答案,我已经回滚了迁移,我创建了两次仍然没有解决请帮助我
【问题讨论】:
【参考方案1】:由于您在 laravel 的 naming convention 之外使用外键,因此您必须将自定义外键名称作为关系定义的第二个参数传递。
public function ruangan()
return $this->belongsTo(Ruangan::class, 'id_ruangan');
然后你可以访问$bar->ruangan->nama_ruangan;
从软干模型中获取nama_ruangan
。
【讨论】:
非常感谢 NoobDev 和 zahid hasan emon 的答案必须结合起来,最后在我在模型中添加关系并使用 return $this->belongsTo(Room: :class, 'id_room');最后我可以调用 $bar->room 并返回值 App\Models\Room #3648 ids: 1, room_name: "Administrative room", created_at: "2021-12-09 17:24:25", updated_at: "2021 -12-09 17:24:25", 这个问题如何接受两个答案? 不强制使用hasMany关系访问$bar->ruangan->nama_ruangan
非常感谢您对我的帮助,我会记住您的帮助我非常感谢您所做的。之前很抱歉,因为看到您的声誉已经很好所以我将选择NoobDev的答案,以便他也可以像你们一样成长,但实际上你们两个做到了,我真的很感激,
您必须实际选择正确的答案,以便它可以帮助未来的用户。【参考方案2】:
你把关系放在软干模型上了吗?
例子:
public function barang()
return $this->hasOne(Barang::class);
顺便说一句,首先返回集合中的第一项
【讨论】:
我刚刚添加,我改变了与 hasMany() 的关系,我一直得到空值 非常感谢 NoobDev 和 zahid hasan emon 的答案必须结合起来,最后在我在模型中添加关系并使用 return $this->belongsTo(Room: :class, 'id_room');最后我可以调用 $bar->room 并返回值 App\Models\Room #3648 ids: 1, room_name: "Administrative room", created_at: "2021-12-09 17:24:25", updated_at: "2021 -12-09 17:24:25",以上是关于Laravel 模型关系错误如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:当我的外键在数组中时,如何在模型中添加关系?