2017-01-01 51 views
1

我想了解laravel雄辯的關係,所以我創建了兩個表。在laravel遷移定義的表的結構是 爲mostpopular表用laravel雄辯的關係選擇數據

Schema::create('mostpopulars',function(Blueprint $table){ 
     $table->increments('id'); 
     $table->integer('song_id')->unsigned(); 
     $table->index('song_id'); 
     $table->foreign('song_id')->references('id')->on('song_details')->delete('cascade'); 
    }); 

爲song_detail表

Schema::create('song_details', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('song_title'); 
     $table->string('song_name'); 
     $table->string('song_album'); 
     $table->string('song_singer'); 
     $table->string('song_musicby'); 
     $table->string('song_location'); 
     $table->string('song_album_image'); 
     $table->string('song_language'); 
     $table->string('song_lyrics',3000); 
     $table->timestamps(); 
    }); 

然後在Mostpopular模型定義的函數對與2表

public function song_detail() 
{ 
    return $this->hasOne('App\Song_detail','id'); 
} 

和控制器索引功能我想要做這樣的事情

$songs   = Song_detail::select()->latest()->get(); 
    $malayalamSongs = Mostpopular::select('song_id')->groupBy('song_id')->havingRaw('COUNT(*) > 2')->get(); 
    $mp = $malayalamSongs; 
    dd($mp->song_detail); 

,但得到的錯誤

Undefined property: Illuminate\Database\Eloquent\Collection::$Song_detail 

請幫我找出錯誤和我所試圖做的是從song_details表,其中song_id發生兩次以上song_id獲得歌曲的細節是mostpopular表。

+1

您song_detail模型需要需要通過belongsTo –

+0

確定我加入公共職能songsdetail( ) { \t return $ this-> belongTo('App \ Mostpoular'); } –

+0

但我得到相同的錯誤 –

回答

1

eloquent get()會返回一個數組,你不能調用數組上的關係方法。

,你可以先用()取代的get()或

變化

$mp = $malayalamSongs; 
dd($mp->song_detail); 

$mp = $malayalamSongs; 
    foreach($mp as $v) 
    { 
    dd($v->song_detail); 
    } 
+0

錯誤消失了,但頁面空白沒有顯示 –

+0

對不起空白頁是因爲我刪除了get()所以我把它放回去,但我得到null insted歌曲的詳細信息 –

+1

請確保查詢有結果。如果不是的話,結果爲空 –