2015-01-14 2 views
-1

im пытается выяснить красноречивым и с трудом понять это, даже tho ive попытался прочитать на нем.Laravel eloquent отношения не дают мне то, что я хочу

У меня есть две таблицы: fs_festivals и fs_bands.

fs_festivals: идентификатор, имя

fs_bands: Идентификация, festival_id, имя

Так, один фестиваль может иметь много групп, и одна группа принадлежит к фестивалю.

Band-модель (Band.php)

class Band extends Eloquent implements UserInterface, RemindableInterface { 

use UserTrait, RemindableTrait; 

protected $fillable = array(
    'festival_id','name','note','bandak', 'bandakinfo','created_by','updated_by' 
); 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'fs_bands'; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = array('password', 'remember_token'); 

public function festival() { 
    return $this->belongsTo('Festival'); 
} 

}

Фестиваль-модель (Festival.php):

class Festival extends Eloquent implements UserInterface, RemindableInterface { 

use UserTrait, RemindableTrait; 

protected $fillable = array(
    'name','year','info','slug', 'image','created_by','updated_by' 
); 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'fs_festivals'; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = array('password', 'remember_token'); 

public function bands() { 
    return $this->hasMany('Band'); 
} 

}

В моем контроллере:

public function festivalHome() { 
    $bands = Band::all(); 
    return View::make('fis.festivalhome')->with('bands',$bands); 
} 

И на мой взгляд:

Bands: 
@foreach($bands as $band) 
{{ $band->name }} 
@endforeach 

В этом списке перечислены все группы в таблице fs_bands. Я только хочу перечислить тех, кто настроен с фестивалем_ид текущего фестиваля, над которым он работает (скажем, festival_id = '2'). Как я должен это делать?

Ive пытался это (видя, что другие сделали),

@foreach($festival->$bands as $band) 

Но это дает мне ошибку

Неопределенная переменная: фестиваль

Что я делаю неправильно ? Также мне интересно, должен ли я сделать что-то еще вместо $ bands = Band: all(); перечислить их festival_id? Это был бы вариант, но что-то подсказывает мне, что это нужно делать автоматически с красноречивым.

ответ

1

Контроллер:

public function festivalHome($id) { 
     //$bands = Band::all(); 
     $festival = Festival::with('bands')->whereId($id)->first(); //it will load festival with all his bands 
     return View::make('fis.festivalhome')->with('festival',$festival); 


     // or you can filter bands 
     $bands = Band::whereHas('festival', function($query) use ($id){ 
        $query->whereId($id); 
       })->get(); //there will be only bands which will be on the festival 

    } 

А на ваш взгляд:

@foreach($festival->bands as $band) 
    {{ $band->name }} 
@endforeach 

//or 
@foreach($bands as $band) 
    {{ $band->name }} 
@endforeach 
+0

Это дает мне: Не определено свойство: Осветить \ Database \ Eloquent \ Builder :: $ полосы (Вид:/вар/WWW/html/fis/app/views/fis/festivalhome.blade.php) –

+0

забыть о первом() методе :) fix – xAoc

+0

Это сработало. Я использовал: $ festival = Festival :: с ('band') -> whereId ($ festivalid) -> first(); а затем @foreach ($ festival-> band as $ band) {{$ band-> name}} @endforeach Спасибо большое Dmytro! –

Смежные вопросы