相关的Laravel条件(取决于另一个表)属于3个表

时间:2015-07-29 23:26:26

标签: php mysql laravel laravel-5 eloquent

我在使用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"。

0 个答案:

没有答案