【问题标题】:Displaying related field from table into a datatable issue将表中的相关字段显示到数据表问题中
【发布时间】:2018-01-14 22:48:37
【问题描述】:

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

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

这是关卡模型:

public function classes()
{
    return $this->hasMany('App\Models\NiixClass');
}

还有Class模型

public function level()
{
    return $this->belongsTo('App\Models\Level');
}

当我尝试访问 Level->name 时,没有返回任何内容。 例如从这个:

$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);

这将返回 null。

更新 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();
    });
}

【问题讨论】:

  • 我们能看到数据库模式吗?您需要根据约定在 classes 表中命名外键,或者在 Level 模型中指定字段名称。
  • 我已经用架构更新了问题。

标签: jquery laravel datatable


【解决方案1】:

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

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

更新

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

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

执行此操作后,可以调用相关表,因为包含相关字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2020-08-19
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多