Я имею:
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' );
});
Оба отношения должны быть belongsToMany()
,
Кроме того, это не имеет большого значения, но вам не нужно увеличивать идентификатор в engagement_project
если вы не планируете использовать его где-то еще.
Чтобы получить свой список, вы бы сделали …
$unit = Project::with( 'engagements')->find($projectID);
foreach($unit->engagements as $engagement) {
echo $engagement->id;
}
Других решений пока нет …