Рейтинг:0

Как скопировать поля из объекта в другой для объектов того же типа?

флаг in
Lia

У меня есть 2 объекта одного и того же типа и комплекта, но они используются в 2 разных случаях (по-разному связаны с разными объектами). После публикации второго объекта я хочу получить новые данные и поместить их в «основной» объект, поскольку вся логика построена на основе основного объекта и взаимодействует с другими вещами.

Что у меня есть до сих пор:

 $fields_to_exclude = [
  'я бы',
  'уид',
  'вид',
];

foreach ($second_entity->getFields() ?: [] as $name => $field) {
  если (!in_array($name, $fields_to_exclude)) {
    $main_entity->set($name, $field->getValue());
  }
}
$main_entity->сохранить();

Полей около 120, и мне нужно исключить только 5-10. Моя проблема в том, что я хочу получить только поля, созданные в интерфейсе, такие как «field_country_name», «field_category» и т. д. Приведенная выше функция возвращает все поля сущности (такие как ID, UID и т. д.), и их слишком много, чтобы их можно было принять во внимание. Есть ли способ получить только «настраиваемые поля»? В Drupal API ничего не нашел.

Рейтинг:0
флаг in
Lia

По-видимому, вы можете просто проверить, содержит ли имя поля слово «поле», поскольку оно относится только к полям, «созданным из интерфейса».

strpos($имя, 'поле') !== ЛОЖЬ
флаг cn
Это разумное решение, но учтите, что можно отредактировать поле **имя машины** в интерфейсе и удалить из него `field_`, поэтому ваше решение не гарантирует, что все поля, созданные UI, будут найдены.
4uk4 avatar
флаг cn
Да, типы содержимого узла по умолчанию имеют, например, тело и комментарий, которые можно настроить с помощью пользовательского интерфейса, но без префикса. Лучше проверить, является ли `$field->getFieldDefinition()` экземпляром `\Drupal\field\FieldConfigInterface`. См. https://drupal.stackexchange.com/questions/278500/get-the-custom-fields-created-for-user-entity-in-drupal8.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.