如何使用实体引用类型以编程方式创建节点 - Drupal 8
How to create node programmatically with entity reference type - Drupal 8
我知道有这个解决方案(https://drupal.stackexchange.com/questions/213379/programmatically-update-an-entity-reference-field)
但我没有为我工作,我有一个错误:
Drupal\Core\Entity\EntityStorageException: SQLSTATE[01000]: 警告: 1265 第 1 行 'created' 列的数据被截断:INSERT INTO {taxonomy_index} (nid, tid, status, sticky, created) VALUES (: db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4);数组 ( [:db_insert_placeholder_0] => 791 [:db_insert_placeholder_1] => 10 [:db_insert_placeholder_2] => 1 [:db_insert_placeholder_3] => 0 [:db_insert_placeholder_4] => 2021-08-17T12:32:12.397 ) 在 Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (core\lib\Drupal\Core\Entity\Sql\SqlContentEntityStorage.php 的第 846 行).
当我尝试创建具有实体引用字段的节点时。
该实体是一个分类术语,不需要创建它们。
我使用 API 调用来填充我的内容类型。
这是我的代码:
$newJob = Node::create([
'type' => 'jobs',
'title' => $job->label,
'uid' => 219,
'field_api_id' => $job->id,
'created' => $job->publishedDate,
'field_jobs_title_function' => [
'value' => $job->label
],
'field_jobs_purpose' => [
'value' => !is_object($job->JobDataSet->JobData->role) ? $job->JobDataSet->JobData->role : '',
'format' => 'full_html_no_ckeditor'
],
'field_jobs_how_to_apply' => [
'value' => !is_object($job->JobDataSet->JobData->requiredFiles) ? $job->JobDataSet->JobData->requiredFiles : '',
'format' => 'full_html_no_ckeditor'
],
'field_link_cta' => [
'uri' => !is_object($job->JobDataSet->JobData->applyUrl) ? $job->JobDataSet->JobData->applyUrl : '',
'title' => 'Postuler maintenant !'
],
]);
$newJob->setPublished(TRUE);
$newJob->save();
$newJob->field_domain->target_id = $domain;
$newJob->save();
$domain 是现有分类术语的 int correspondinf,当我用 :
加载它时它起作用
Term::load($domain);
但是当我想创建节点时,我总是遇到错误 SQLSTATE[01000]。
我试过了:
,
'field_domain' => [
'target_id' => $domain
],
$newJob->field_domain->target_id = $domain;
为什么这对 Drupal 不正确?
谢谢你
如果该字段是一个实体引用,您应该只需要提供一个目标 ID 以 link 实体彼此。在您的情况下,以下内容就足够了:
$newJob = Node::create([
...
'field_domain' => $domain,
...
])
其中 $domain 变量只是对应于另一个实体的 ID。
无需指定此变量为目标id。
我找到了解决方案。
问题是日期的格式。
必须是时间戳,但我不知道为什么。
$newJob->setCreatedTime((new DrupalDateTime($newJob->getCreatedTime()))->getTimestamp());
$newJob->field_domain->setValue($domain);
$newJob->save();
我知道有这个解决方案(https://drupal.stackexchange.com/questions/213379/programmatically-update-an-entity-reference-field)
但我没有为我工作,我有一个错误: Drupal\Core\Entity\EntityStorageException: SQLSTATE[01000]: 警告: 1265 第 1 行 'created' 列的数据被截断:INSERT INTO {taxonomy_index} (nid, tid, status, sticky, created) VALUES (: db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4);数组 ( [:db_insert_placeholder_0] => 791 [:db_insert_placeholder_1] => 10 [:db_insert_placeholder_2] => 1 [:db_insert_placeholder_3] => 0 [:db_insert_placeholder_4] => 2021-08-17T12:32:12.397 ) 在 Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (core\lib\Drupal\Core\Entity\Sql\SqlContentEntityStorage.php 的第 846 行).
当我尝试创建具有实体引用字段的节点时。 该实体是一个分类术语,不需要创建它们。 我使用 API 调用来填充我的内容类型。
这是我的代码:
$newJob = Node::create([
'type' => 'jobs',
'title' => $job->label,
'uid' => 219,
'field_api_id' => $job->id,
'created' => $job->publishedDate,
'field_jobs_title_function' => [
'value' => $job->label
],
'field_jobs_purpose' => [
'value' => !is_object($job->JobDataSet->JobData->role) ? $job->JobDataSet->JobData->role : '',
'format' => 'full_html_no_ckeditor'
],
'field_jobs_how_to_apply' => [
'value' => !is_object($job->JobDataSet->JobData->requiredFiles) ? $job->JobDataSet->JobData->requiredFiles : '',
'format' => 'full_html_no_ckeditor'
],
'field_link_cta' => [
'uri' => !is_object($job->JobDataSet->JobData->applyUrl) ? $job->JobDataSet->JobData->applyUrl : '',
'title' => 'Postuler maintenant !'
],
]);
$newJob->setPublished(TRUE);
$newJob->save();
$newJob->field_domain->target_id = $domain;
$newJob->save();
$domain 是现有分类术语的 int correspondinf,当我用 :
加载它时它起作用Term::load($domain);
但是当我想创建节点时,我总是遇到错误 SQLSTATE[01000]。
我试过了:
,
'field_domain' => [
'target_id' => $domain
],
$newJob->field_domain->target_id = $domain;
为什么这对 Drupal 不正确? 谢谢你
如果该字段是一个实体引用,您应该只需要提供一个目标 ID 以 link 实体彼此。在您的情况下,以下内容就足够了:
$newJob = Node::create([
...
'field_domain' => $domain,
...
])
其中 $domain 变量只是对应于另一个实体的 ID。 无需指定此变量为目标id。
我找到了解决方案。
问题是日期的格式。
必须是时间戳,但我不知道为什么。
$newJob->setCreatedTime((new DrupalDateTime($newJob->getCreatedTime()))->getTimestamp());
$newJob->field_domain->setValue($domain);
$newJob->save();