首页 > 解决方案 > Laravel 5.6 模型 HasManyThrough 3 个表的关系

问题描述

如何在 Laravel 的 3 个表之间建立关系

+---------------+  +---------------+  +-------------------+
|  venue_images |  |  transactions |  | image_transaction |
+---------------+  +---------------+  +-------------------+
|   id          |  |   id          |  |  venue_image_id   |
|   user_id     |  |   user_id     |  |  transaction_id   |
+---------------+  +---------------+  +-------------------+

这是我的代码,但它不起作用。

class Transaction extends Model
{
    public function images(){
        return $this->hasManyThrough(ImageTransaction::class ,VenueImage::class, 'transaction_id', 'id');
    }
}

我想使用事务 id 和场所图像 id 加入三个表

在我的控制器上

 $transactions = transaction::where('user_id', Auth::id())->with('images')->get();

标签: phplaravellaravel-5

解决方案


如果我没有误解你的问题,你有一个多对多关系pivot表。Eloquent 会自动按字母顺序排列数据透视表的名称,因此您需要在参数中传递您的自定义名称。[文档]image_transactiontransactions_venue_imageimage_transaction

在您的VenueImage模型中

public function transactions()
{
    return $this->belongsToMany('App\Transaction','image_transaction');
}

在您的交易模型中

public function venue_images()
{
    return $this->belongsToMany('App\VenueImage','image_transaction');
}

还有第三个和第四个参数是相关模型的外键,在文档中有更好的解释。

在你的控制器中

$transactions = transaction::where('user_id', Auth::id())->with('venue_images')->get();

推荐阅读