2014-10-09 3 views
0

у меня есть:Laravel и получить список всех hasMany

class Project extends Eloquent 
{ 
    protected $table = 'projects'; 

    public function engagements() 
    { 
     /** 
     * belonngsToMany is a strange name, but it seems 
     * to be the only way of tying the relationship up 
     */ 
     return $this->hasMany('Engagement'); 
    } 
} 

и

class Engagement extends Eloquent 
{ 
    protected $table = 'engagements'; 

    public function projects() 
    { 
     return $this->belongsToMany('Project'); 
    } 
} 

Я хочу, чтобы получить список обязательств по идентификатору проекта ... как это работает?

$unit = Project::where('id', $projectID)->with('engagements') 

терпит неудачу:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'engagements.project_id' in 'where clause' (SQL: select * from `engagements` where `engagements`.`project_id` in (9)) 

Контекст:

  • Помолвка может принадлежать многим проектам.
  • Проект имеет привязки к нему.

Таблица структуры:

проекты:

 Schema::create('projects', function($table) 
     { 
      $table->increments('id');  
      $table->timestamps(); 

      $table->string('title', 255);     
      $table->softDeletes(); 
     }); 

захватов:

 Schema::create('engagements', function($table) 
     { 
      $table->increments('id');  
      $table->timestamps(); 
      $table->softDeletes(); 
     }); 

отношения:

 Schema::create('engagement_project', function(Blueprint $table) 
     {    
      $table->increments('id'); 

      $table->integer('engagement_id')->unsigned(); 
      $table->index('engagement_id'); 

      $table->integer('project_id')->unsigned(); 
      $table->index('project_id'); 

      $table->timestamps(); 
     }); 

     Schema::table('engagement_project', function($table) 
     { 
      $table->foreign('engagement_id')->references('id')->on('engagements'); 
      $table->foreign('project_id')->references('id')->on('projects'); 
     }); 
+0

разместить свои структуры таблиц – justrohu

+0

Я добавил, что – Jimmyt1988

ответ

1

Оба отношения должны быть belongsToMany().

Кроме того, это не имеет особого значения, но вам не нужно увеличивать ID в engagement_project, если вы не планируете использовать его в другом месте.

Чтобы получить список, вы могли бы сделать ...

$unit = Project::with('engagements')->find($projectID); 
foreach($unit->engagements as $engagement) { 
    echo $engagement->id; 
} 
+0

Изменение этого в течение только возвращает 1 результат ... но этот вопрос может быть дальше вниз мой код ... Я вернусь к вам. :) – Jimmyt1988

+0

Если это работает, и вы получаете только один результат, я бы проверил вашу базу данных и убедился, что у вас есть более одной записи в «обязательствах» и «engagement_project» для этого '$ projectID' – user3158900

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