Laravel 5 4 个表之间的雄辩关系

问题描述 投票:0回答:4

我有四个表,我使用了 Laravel 5.2 雄辩的方法

Municipalities
id
name
---------------
Barangays
id
name
municipality_id
----------------
Puroks
id
name
barangay_id
----------------
Households
id
name
purok_id

我还在每个模型中分别附加了 hasMany()、belongsTo() 关系。

所以:

Municipalities hasMany() Barangays hasMany() Puroks hasMany() Households

Households belongsTo() Puroks belongsTo() Barangays belongsTo() Municipalities

我想知道有没有办法获得市政府的名称 通过入户查询?

喜欢

  query = Household->purok->barangay->municipality->name

我几乎不需要查询即可在一次查询中获取家庭名称、purok、描笼涯和市镇名称。

我通常通过手动左连接这些表来完成。

php laravel laravel-5
4个回答
1
投票

是的,您可以通过在查询中包含联接来获取它,例如:

// $data will have all the columns of Households joined with Municipalities..
    $data = \DB::table('Households')
                    ->select('Households.*', 'Municipalities.*')
                    ->join('Puroks', 'Households.purok_id', '=', 'Puroks.id')
                    ->join('Barangays', 'Puroks.barangay_id', '=', 'Barangays.id')
                    ->join('Municipalities', 'Barangays.municipality_id', '=', 'Municipalities.id')
                    ->get();

希望这有帮助。干杯。


0
投票

将市政当局与 Puroks 的 hasManyThrough 关系定义为:

Municipalities hasManyThrough() Puroks // public function puroks()
Puroks belongsTo() Municipalities // public function municipalities()

然后将其与从 Puroks 到 Households 的

hasMany()
一起使用,您就可以获得结果。

$result = Household::whereHas('puroks', function($query) {
        $query->whereHas('municipalities', function($qry) {
            $qry->whereNotNull('name');
        });
    });

试试这个,我不确定它一定会起作用,但它可能对你有帮助。


0
投票

是的,你可以通过

Households::with(['Puroks', 'Puroks.Barangays', 'Puroks.Barangays.Municipalities'])->get()->toArray();

0
投票

我可以使用相同的表格结构场景获取城市家庭列表吗?

© www.soinside.com 2019 - 2024. All rights reserved.