2017-08-07 88 views
1

我想在數據表中顯示相關的字段。但是,它不會讓我進入這個領域。從表中顯示相關領域到數據表問題

例如:我有一個叫做Level的模態。我有另一個叫Classes。 一個Level可以有很多類,但一個類只能屬於一個級別。

這裏是水平模式:

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

和類模型

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

當我嘗試訪問級別 - >返回的名字罷了。 例如從這樣的:

$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(); 
    }); 
} 
+0

我們可以看到數據庫模式嗎?您需要根據約定在classes表中命名外鍵,或者在Level模型中指定字段名稱。 – Arty

+0

我已經更新了模式的問題。 –

回答

2

做一個選擇已經(不包括相關領域)篩選出結果查詢返回到您提供的有限領域(並排除關係),即:

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

您應該刪除的選擇功能,看看你有什麼,I,E:

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

這樣做,相關表然後可以調用,因爲相關字段包括在內。

+1

這工作! 非常感謝您的幫助:) –