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

Решение

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

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

Чтобы получить свой список, вы бы сделали …

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]