首页 > 解决方案 > WhereHas 关于多态关系

问题描述

我有下表:

table logs
| id | loggable_id | loggable_type | action |

loggable_type 可以是ContractUser或者Card 我需要从logs表中获取所有记录,但我必须whereHas在每个 loggable_types 上运行,所以像这样:

$logs = Log::whereHas('contract', function() {

})
->whereHas('user', function() {
})
->whereHas('card', function() {
});

但我不确定如何定义这些关系。现在我只有:

   public function loggable()
    {
        return $this->morphTo();
    }

如果重要的话,那就是 Laravel 5.6。

标签: laraveleloquentlaravel-5.6

解决方案


用这个

Comment::whereHasMorph('loggable', [User::class, Card::class], function ($query) {
    $query->where('title', 'foo');
})->get();

推荐阅读