Ich habe folgendes Problem:Laravel 5.2 Drei-Wege-Schwenk mit benutzerdefinierten Dreh Modell
Ich habe drei Tabellen:
contacts (people)
departments
contact_types (e.g. IT-Contact)
Alle von ihnen sind viele-zu-viele-Typen; Eine Person kann für 0-n-Abteilungen als 0-n Contact_types verantwortlich sein (sogar für dieselbe Abteilung wie mehrere Typen). Und so weiter.
Darüber hinaus muss ich eine Geschichte über das ganze Projekt haben, so dass jede der Tabellen auch "valid_start" und "valid_end" Zeitstempel speichert. Ich habe
Deshalb jetzt diese Beziehung Tabelle:
contact_contact_type_department
id
contact_id
contact_type_id
department_id
valid_start
valid_end
Was ich tun am Ende ist ein Modell für die Zwischentabelle zu erstellen:
class DepartmentResponsible extends Model {
protected $table = 'contact_contact_type_department';
protected $fillable = [...];
protected $dates = [
'valid_start',
'valid_end',
];
protected static function boot(){
parent::boot();
static::addGlobalScope(new ValidScope());
}
public function contact() {
return $this->belongsTo('cap\Contact');
}
public function department() {
return $this->belongsTo('cap\Department');
}
public function type() {
return $this->belongsTo('cap\ContactType');
}
}
Kontakt Modell:
class Contact extends CustomModel{
protected $dates = [...];
protected $fillable = [...];
protected static function boot(){
parent::boot();
static::addGlobalScope(new ValidScope());
}
public function departmentResponsibles() {
return $this->hasMany('cap\DepartmentResponsible');
}
}
Kontakttyp Modell:
class ContactType extends CustomModel {
protected $dates = [...];
protected $fillable = [...];
protected static function boot() {
parent::boot();
static::addGlobalScope(new ValidScope());
}
public function responsible() {
return $this->hasMany('cap\DepartmentResponsible');
}
}
Abteilung Model: Ich gehe davon aus ich es muß Pivot-Tabelle
class Department extends CustomModel {
protected $fillable = [...];
protected $dates = [...];
protected static function boot(){
parent::boot();
static::addGlobalScope(new ValidScope());
}
public function responsibles(){
return $this->hasMany('cap\DepartmentResponsible');
}
//other methods down here, which have no immpact on this issue
}
kann ich jetzt Dinge wie
Department::first()->responsibles
In Bezug auf die Frage mit dem Zeitstempel auf der Pivot-Tabelle einer benutzerdefinierten machen wieder (hatte das schon einmal zu tun, in einem anderen Fall, wo ich einen "normalen" 2-Wege-Pivot-Tisch hatte)
Also meine 2 Fragen sind jetzt:
1. Ist das überhaupt der richtige Weg? Ich meine das Ganze mit dem Zwischenmodell und so weiter. Ich versuchte auch andere Möglichkeiten, aber ich konnte nichts wie department->attach(contact)
zu arbeiten, da ich immer die dritte ID auch brauchen ...
2. Wie kann ich etwas wie Department :: first() - > Kontakte zur Arbeit? (In gewisser Weise, wo ich auf die Zwischen "verantwortlichen (= contact_contact_type_department)" -Tabelle zugreifen und Filter basierend auf den Gültigkeitsdaten; zB mit einem Bereich oder mit wherepivot Funktionen)