Điểm:2

EntityQuery trong đó trường đa giá trị chứa một giá trị

lá cờ de

Tôi đã lập trình được 15 năm, 10 năm với PHP, nhưng với dự án Drupal đầu tiên của tôi. Sử dụng Drupal9.

Tôi đang cố truy xuất một thực thể (loại nội dung tùy chỉnh) có 2 trường thực thể (người dùng) đa giá trị. Nếu giá trị tôi có nằm trong một lĩnh vực, tôi muốn lấy một lĩnh vực khác. Vấn đề là tôi không thể tìm ra cách yêu cầu thực thể khi giá trị vô hướng tôi có trong danh sách. Đây là những gì tôi đã có:

trả về \Drupal::entityQuery('nút')
  ->điều kiện('loại', 'osj_relationships')
  ->điều kiện('field_supervised_reps', [$userId], 'IN')
  ->thực thi();

Cái nào tạo ra SQL này:

'CHỌN "base_table".."vid" NHƯ "vid", "base_table".."nid" NHƯ "nid"
TỪ
"nút" "base_table"
INNER THAM GIA "node_field_data" "node_field_data" BẬT "node_field_data".."nid" = "base_table".."nid"
INNER THAM GIA "node__field_supervised_reps" "node__field_supervised_reps" BẬT "node__field_supervised_reps".."entity_id" = "base_table".."nid"
WHERE ("node_field_data".."type" = 'osj_relationships') AND ("node__field_supervised_reps".."field_supervised_reps_target_id" IN ('2458'))'

Phần thứ 2 của mệnh đề WHERE đang tìm kiếm giá trị trường trong tham số của tôi. Tôi cần nó để tìm tham số của mình trong trường. Tôi cũng đã thử CONTAINS nhưng điều đó dường như cho rằng giá trị trường là một chuỗi chứ không phải là một mảng. Nếu tôi có thể biến mệnh đề WHERE xung quanh nó thì thật hoàn hảo. I E.

(('2458') TRONG "node__field_supervised_reps".."field_supervised_reps_target_id") 

Tôi cho rằng tôi có thể sử dụng 'CHỨA' nếu tôi có thể làm nổ tung danh sách trường nhưng điều đó sẽ có nguy cơ gây ra các lần truy cập sai.

Bất kỳ đề xuất?

Điểm:2
lá cờ in

Bạn thậm chí không phải sử dụng TRONG ở đây, chỉ khi bạn có nhiều $userIds, nếu không thì một toán tử = đơn giản sẽ hoạt động:

trả về \Drupal::entityQuery('nút')
  ->điều kiện('loại', 'osj_relationships')
  ->điều kiện('field_supervised_reps', $userId)
  ->thực thi();

Truy vấn được tạo sẽ thực sự hoạt động theo cách bạn muốn. Nó hoạt động vì mỗi giá trị của trường đa giá trị được lưu trữ trong hàng riêng của nó trong cơ sở dữ liệu.

Ví dụ: được cung cấp trường tham chiếu thực thể đa giá trị, field_tags, được thêm vào các nút bài viết, nếu bạn có một bài viết (với id = 111), tham chiếu hai thuật ngữ phân loại có id 222 và 333, thì node__field_tags bảng có thể trông giống như:

đã xóa ID phap nhân bản sửa đổi_id mật mã châu thổ trường_tags_target_id
mạo từ 0 111 777 vi 0 222
mạo từ 0 111 777 vi 1 333
Ed Coakley avatar
lá cờ de
Cảm ơn vi đa trả lơi. Tôi chỉ bắt đầu loay hoay với 'in' & 'contains' sau khi '=' không hoạt động. Ngoài thực thểQuery(), tôi cũng đã thử thực thểTypeManager(): trả về \Drupal::entityTypeManager() ->getStorage('nút') ->loadByProperties([ 'type'=>'osj_relationships', 'field_supervised_reps'=>$userId ]); ... với cùng một kết quả (mảng trống). Tôi đã xác minh mục tiêu mà tôi đang tìm kiếm có trong cơ sở dữ liệu và tên trường là chính xác. Tôi đã thử intval($userid) cũng không thay đổi gì. Bất cứ một đề nghị nào khác?
Ed Coakley avatar
lá cờ de
Chà, khi kiểm tra kỹ hơn, tôi đã phát hiện ra một lỗi chính tả khi tôi tạo loại nội dung. Như mọi khi, cỗ máy ngu ngốc đang làm những gì nó được bảo. 'osj_relationships' != 'osj_releationships' Ư. Cảm ơn vì ít nhất đã xác nhận rằng tôi đang sủa đúng cây.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.