我在使用Laravel 5的雄辩模型时遇到了一个问题,并且为关系提供了一些条件。
我的数据库有3个表
带有示例数据的Voivodeships 结构
[id] [name]
1 voiv1
2 voiv2
3 voiv3
带有示例数据的县结构
[id] [name] [voivode]
1 count1 1
2 count2 1
1 count3 2
2 count4 2
带有示例数据的社区结构
[id] [name] [voivode] [county]
1 comm1 1 1
2 comm2 1 1
1 comm3 2 1
2 comm4 2 1
带有示例数据的城市结构
[id] [name] [community] [county] [voivode]
1 city1 1 1 2
2 city2 2 1 2
3 city3 2 1 1
现在我通过它的ID获取城市,并且还需要获得省,县和社区的名称,没有问题但需要添加条件,因为相同的社区ID可以分配给许多省
所以我的原始查询将是
DB::raw("SELECT
c.name, co.name as comName, cou.name as couName, v.name as voivName
FROM city c
LEFT JOIN community co ON c.community=co.id
LEFT JOIN counties cou ON c.county=cou.id
LEFT JOIN voivodeships v ON c.voivode=v.id
WHERE c.id=3
AND
(co.voivode=c.voivode AND co.county=c.county)
AND
(cou.id=c.county AND cou.voivode=c.voivode)
")
所有关系都正常,但因为没有
AND
(co.voivode=c.voivode AND co.county=c.county)
AND
(cou.id=c.county AND cou.voivode=c.voivode)
")
关系db返回正确的cityname和voiv名称,但countyname和社区名称首先匹配id是正确的但不是我需要的数据。
我尝试添加到我的关系方法 - >这样的地方
public function community()
{
return
$this->belongsTo('App\Models\Communities', 'community', 'id')
->where('voiv', '=', 'city.voiv')
->where('county', '=', 'city.county')
->select(['id', 'name']);
}
但是没有工作......
编辑(回答评论)
是的,我希望显示所有,城市名,社区名,countyname和voivodeshipname。
县和社区id是独一无二的,但是有了省,社区的县和县的省。 因此,对于给定省和县的社区而言,没有2个具有相同身份的社区。 对于给定省份的县,没有2个具有相同身份的县。
方法社区在城市模型中。 解释"在关系db中返回正确的cityname和voiv名称,但countyname和社区名称首先匹配id是正确的但不是我需要的数据"意味着在我的情况下,数据库正在获得例如首先匹配具有提供的id的社区(错误是因为它在我上面写的时候是唯一的,这就是我需要条件的原因)。
因此换句话说,我希望获得与提供的具有雄辩模型和关系的原始查询相同的结果。只需要在这个例子中添加关系where where语句,具体取决于主表" city"。