获取 EAV 上特殊集合的所有可用属性值

Get all available attributes with values for special collection on EAV

我正在使用 this package 部署 EAV 模型。

与任何 EAV 系统一样,我有不同的 table 用于在我的数据库中存储 varchar、布尔值、文本和整数值,以及用于存储属性的属性 table。 我需要根据我的 posts 列表(集合)获取所有可用属性。

例如posts

的特殊列表
$posts = Post::where('category_id',2)->where('tag_id',4)->get();

在每个 post 上,我有不同的属性和不同的值,我需要一种方法来获取此列表中的所有属性(不是系统上的所有属性)和基于此集合的可用值。

我正在为我的 post 开发一个过滤页面,我需要在边栏上显示可用属性及其可用值以进行更改。

更新 - 解决方案

Finlay 我找到了一个很好的解决方案,可以根据我的查询获取所有属性。

   $attributes = $posts
        ->leftJoin('attribute_boolean_values', 'attribute_boolean_values.entity_id', 'posts.id')
        ->leftJoin('attribute_varchar_values', 'attribute_varchar_values.entity_id', 'posts.id')
        ->join('attributes', function ($join) {
            $join->oron('attribute_boolean_values.attribute_id', 'attributes.id');
            $join->oron('attribute_varchar_values.attribute_id', 'attributes.id');
        })
        ->groupBy('attributes.id')
        ->select([
            'attributes.slug as slug',
            'attributes.type as type',
            'attributes.id as id',
        ])
        ->get();