在 Laravel 5 中创建与多对多关系的关系
Create a relation to a many to many relation in Laravel 5
首先,我将解释我的模型是如何创建的。我有 3 个模型教师、签名和资源
一个Resource属于一个Teacher AND also Signature,Signature和Teacher是多对多的关系。
老师有很多资源。
签名有很多资源。
老师有很多签名。
签名有很多老师
资源属于老师,也属于签名。
这是我的数据库结构:
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?
}
}
$teacher = Teacher::with(['signatures.resources'], ['resources'])->find($teacherId);
这会为您提供老师的所有资源、他的所有签名以及属于这些签名的所有资源
在教师模型上,从给定的签名中获取所有资源
Teacher::find($teacherId)->signatures()->find($signatureId)->resources;
在签名上获得来自 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();
首先,我将解释我的模型是如何创建的。我有 3 个模型教师、签名和资源
一个Resource属于一个Teacher AND also Signature,Signature和Teacher是多对多的关系。
老师有很多资源。 签名有很多资源。 老师有很多签名。 签名有很多老师 资源属于老师,也属于签名。
这是我的数据库结构:
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?
}
}
$teacher = Teacher::with(['signatures.resources'], ['resources'])->find($teacherId);
这会为您提供老师的所有资源、他的所有签名以及属于这些签名的所有资源
在教师模型上,从给定的签名中获取所有资源
Teacher::find($teacherId)->signatures()->find($signatureId)->resources;
在签名上获得来自 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();