rapidwebltd/improved-polymorphic-eloquent-builder

尝试使用带有标准 Eloquent 多态关系的 whereHas 查询将会失败,因为 Eloquent 无法确定正确的模型来检索。'Improved Polymorphic Eloquent Builder' 是一个扩展 Laravel 5.1 内置的 Eloquent Builder 类的类。它

v2.0.2 2018-01-30 19:23 UTC

This package is auto-updated.

Last update: 2024-09-14 02:53:18 UTC


README

Packagist

尝试使用 whereHas 查询与标准 Eloquent 多态关系将会失败,因为 Eloquent 无法确定正确的模型来检索。您可能会收到类似以下错误,因为 Eloquent 尝试使用不包含其表名的模型列构建查询。

QueryException in Connection.php line 662:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'column_name' in 'where clause'

'Improved Polymorphic Eloquent Builder' 是一个扩展 Laravel 5.1 内置的 Eloquent Builder 类的类。它允许有限地使用 whereHas 方法来查询 Eloquent 多态关系。

要求

您必须使用 Laravel 5.1 作为框架和 Eloquent 作为 ORM。

安装

只需在项目的根目录中使用 Composer 安装此包。

composer require rapidwebltd/improved-polymorphic-eloquent-builder

然后,将任何使用多态关系的 Eloquent 模型更改为其扩展 \RapidWeb\ImprovedPolymorphicEloquentBuilder\Model 类。这通常涉及包含返回 morphTo() 关系的模型。以下是一个示例类。

class Variation extends \RapidWeb\ImprovedPolymorphicEloquentBuilder\Model
{
  public function model()
  {
    return $this->morphTo();
  }
}

用法

执行 whereHas 查询时,您必须指定第五个参数作为形态类型。形态类型是指您希望过滤的多态类型的数组。这些应该表示为与多态关系中的 [...]_type 字段可能的值相等的字符串。

以下示例选择所有具有相关 model 记录类型 bagsbrand_id 为 2 的 variation 记录。

Variation::whereHas('model', function($query) use ($brandId) {
  $query->where('brand_id', 2);
}, '>=', 1, ['bags'])->get();

此示例的数据库结构类似于以下。多态字段用 粗体 标记。