[5.x]: Passing `withProvisionalDrafts` on a Matrix field throws `array_intersect()` TypeError

Đang mở
#20,308 1 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@brandonkelly đang làm issue này rồi.

Từ ngày 3/11/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

bug repo:cms
What happened?
Description

A GraphQL selection on a Matrix field that includes the withProvisionalDrafts argument crashes in ElementQueryConditionBuilder. Matrix::getEagerLoadingGqlConditions() returns that argument as a boolean (Craft::$app->getRequest()->getIsPreview()), and the condition builder passes that boolean to array_intersect() whenever the query also supplies the argument. The query value is wrapped in an array first. The schema value is not. Both true and false throw. Omitting the argument works, because the other branch assigns the boolean as-is. Entries fields are unaffected: their eager-load conditions are arrays (sectionId, typeId). Reproduced on 5.11.5.1. The same two spots are unchanged on the current 5.x head: src/fields/Matrix.php getEagerLoadingGqlConditions() and src/gql/ElementQueryConditionBuilder.php line 475.

Steps to reproduce
  1. Install Craft 5.11.5.1, or use the current 5.x branch.
  2. Expose an entry type to GraphQL that has a Matrix field, for example headerTitle.
  3. Run this query against the GraphQL endpoint, with a public request so getIsPreview() is false:
{
  entry(slug: "home") {
    ... on home_Entry {
      headerTitle(withProvisionalDrafts: true) {
        __typename
      }
    }
  }
}
  1. Repeat with withProvisionalDrafts: false.
Expected behavior

The query returns the Matrix blocks. A boolean schema condition should not be passed to array_intersect(). Either apply it as a scalar, or reject the argument during GraphQL validation. Passing the argument is not required for provisional drafts: when it is omitted, Matrix already calls withProvisionalDrafts() on its nested query when getIsPreview() is true.

Actual behavior

The request fails with a GraphQL error:

array_intersect(): Argument #2 must be of type array, false given

Stack points at craft\gql\ElementQueryConditionBuilder, line 475. With withProvisionalDrafts: true on a preview request, argument #2 is true and the same TypeError is thrown.

Craft CMS version

5.11.5.1

PHP version

8.4

Operating system and version

linux

Database type and version

mysql

Image driver and version

gd

Installed plugins and versions
Ngôn ngữ chính
PHP
Star
3.6k
Fork
714
Merge trung bình
13 giờ 9 phút
Pull request đã merge (30 ngày)
378

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của craftcms/cms

Tất cả issue của craftcms/cms

Issue tương tự

Thêm issue về PHP

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.