Laravel雄辩地使用一个表中的id来搜索联结表?

时间:2017-06-15 14:30:52

标签: laravel laravel-5 eloquent laravel-eloquent

所以我有3张桌子

- 商务  - ID -地址  - ID -business_address   - business_id   - address_id

现在,当我进入视图业务页面时,我将业务表中的business-> id作为$ id传递:

public function displayBusiness($id) {
    $business = Business::find($id);
    $address = Address::find($id);

此时此功能完全正常,但如果地址有不同的ID,该怎么办?

这样:

    -Business
     - id = 1
    -Address
     - id = 2
    -business_address
     - business_id = 1
     - address_id = 2

那么如何修改它以便当业务表= 1中的id进入business_address并找到匹配的地址id并带回与之匹配的记录

1 个答案:

答案 0 :(得分:2)

你应该拥有的是一种关系。因此,在您的Business模型中,您需要添加以下内容。

public function addresses() {
    return $this->belongsToMany(Address::class, 'business_address', 'address_id', 'business_id');
}

然后在您的Address模型中,您将拥有以下内容。

public function addresses() {
    return $this->belongsToMany(Business::class, 'business_address', 'business_id', 'address_id');
}

有了这个,您现在可以执行以下操作。

public function displayBusiness($id) {
    $business = Business::with('addresses')->find($id);
}

然后您通过$business->addresses访问地址。

这完全基于您目前拥有的内容,所以我假设一个Address可以属于多个Business。如果不是这种情况,您需要重构您的关系和数据库,因为不需要数据透视表。