2015-05-09 177 views
0

首先,我將解釋我的模型是如何創建的。我有3個模型老師,簽名和資源在Laravel 5中創建與多對多關係的關係

一個資源belogs給老師和簽名,簽名和老師有多對多的關係。

老師有很多資源。 簽名有許多資源。 老師有很多簽名。 簽名有許多教師 資源被授予老師,也屬於簽名。

這裏是我的數據庫結構:

Teachers 
     id 
     name 

    Signature 
     id 
     name 
     dsescription 

    Resources 
     id 
     name 
     path 
     teacher_id 
     signature_id 

    signature_teacher //table from many to many relation doesn't have a model related to it 
     id 
     signature_id 
     teacher_id 

現在我想從一個teacher_id的資源,也是一個signature_id 例如在教師模型從給定簽名 或簽名讓所有得到所有資源來自ginven教師的資源。

我試着用關係模型中的一對多關係,但是這使得我所有的資源形成一個教師或一個簽名的所有資源,但不是來自教師的資源,也是一個簽名。

class Resource extends Model { 
    public teacher(){ 
     return $this->belongsTo('APP\Teacher'); 
    } 
    public signature(){ 
     return $this->belongsTo('APP\Signature'); 
    } 

} 


class Teacher extends Model { 

    public function signatures(){ 
     return $this->belongsToMany('App\Signature'); 
    } 

    public function resources() { 
     return $this->hasMany('App\Resource'); //return all resources from a teacher 
    // how can i get the resources with a given signature 
    } 

} 


class Signature extends Model { 

    public function teachers(){ 
     return $this->belongsToMany('App\Teacher') 
    } 

    public function resources() 
    { 
     return $this->hasMany('App\Resource'); //return all resources from a signature 
    //how can i get all the resources with a given teacher? 
    } 

} 

回答

1
$teacher = Teacher::with(['signatures.resources'], ['resources'])->find($teacherId); 

這給你的老師與他的所有資源,所有他的簽名,屬於這些簽名

教師模型中的所有資源得到所有資源從給定簽名

Teacher::find($teacherId)->signatures()->find($signatureId)->resources; 

on署名獲得ginven教師的所有資源

Signature::find($signatureId)->teachers()->find($teacherId)->resources; 

編輯

$resources = Resource::whereHas('teacher', function($q) 
{ 
    $q->where('id', $teacherId); 

}) 
->whereHas('signature', function($q) 
{ 
    $q->where('id', $signatureId); 

})->get(); 
+0

確定這要給我belogs到簽名老師的資源。但例如我有這些資源: resource1 belogs簽名1和teacher2。 resource2在簽名2和教師2上簽名。 當我打電話給 $ signatureId = signature1; $ teacherId = teacher2; Signature :: find($ signatureId) - > teachers() - > find($ teacherId) - > resources; 即將返回resource1和resource2,但resource2不會記錄到簽名1。 –

+0

好吧,我可以怎麼把格式的評論? –

+0

檢查我的編輯,這有道理嗎? –