【问题标题】:Laravel eloquent use id from one table to search junction table?Laravel eloquent 使用一张表中的 id 来搜索联结表?
【发布时间】:2017-06-15 22:39:46
【问题描述】:

所以我有 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

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

【问题讨论】:

标签: laravel laravel-5 eloquent laravel-eloquent


【解决方案1】:

你应该拥有的是一段关系。因此,在您的 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。如果不是这种情况,则需要重构关系和数据库,因为不需要数据透视表。

【讨论】:

  • 我这样做了,我得到:调用模型 [App\Business] 上的未定义关系 [地址]。
  • 它是addresses,复数形式。
  • 我确信它在我的模型中是复数
  • 不,我的意思是你在尝试$model->address,它必须是$model->addressesBusiness::with('addresses'),你在做Business::with('address')
猜你喜欢
  • 2021-08-07
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多