将表中的相关字段显示为数据表问题



我正在尝试在数据表中显示相关字段。但是,它不会让我访问该字段。

示例:我有一个名为"级别"的模态。我有另一个叫类。 一个级别可以有多个类,但一个类只能属于一个级别。

下面是关卡模型:

public function classes()
{
return $this->hasMany('AppModelsNiixClass');
}

和班级模型

public function level()
{
return $this->belongsTo('AppModelsLevel');
}

当我尝试访问>级名称时,不会返回任何内容。 例如:

$classes = NiixClass::select(['classes.id', 'classes.name', 'classes.created_at', 'classes.updated_at'])->with('level')->get();
dd($classes[0]->level()->get());

我得到:

Collection {#413
#items: []
}

更新:

dd($classes[0]->level);

这将返回空值。

更新 2:

下面是类架构

public function up()
{
//
Schema::create('classes', function (Blueprint $table) {
$table->increments('id');
$table->integer('level_id');
$table->string('name');
$table->string('thin_background_image_local');
$table->string('thin_background_image_s3', 2083);
$table->string('full_background_image_local');
$table->string('full_background_image_s3', 2083);
$table->boolean('is_free')->default(false);
$table->integer('num_minutes');
$table->integer('sort_order');
$table->timestamps();
$table->softDeletes();
});
}

下面是级别架构

public function up()
{
//
Schema::create('levels', function (Blueprint $table) {
$table->increments('id');
$table->integer('training_programme_id');
$table->string('name');
$table->string('logo_image_local');
$table->string('logo_image_s3', 2083);
$table->string('background_image_local');
$table->string('background_image_s3', 2083);
$table->integer('weeks_num');
$table->text('description_intro');
$table->text('description_main');
$table->string('video_local');
$table->string('video_s3', 2083);
$table->integer('sort_order');
$table->timestamps();
$table->softDeletes();
});
}

已经执行选择(没有相关字段(会过滤掉查询返回到您提供的有限字段的结果(并排除关系(,即:

NiixClass::select(['classes.id', 'classes.name', 'classes.created_at', 'classes.updated_at'])->with('level')->get();

您应该删除选择功能,然后查看您拥有的内容,即:

$classes = NiixClass::with('level')->get();
dd($classes->first()->level); //level is a nested object in the collection

更新

为了仍然将结果限制在类表中的某些字段,您需要在选择中包含外键,即"level_id":

$classes = NiixClass::select(['id', 'name', 'created_at', 'updated_at', 'level_id'])
->with('level')
->get();

这样做,然后可以调用相关表,因为包含相关字段。

最新更新