ExpressエンティティのエントリーID取得について

2020年8月21日 at 15:07

フォーラムの皆さま

いつもお世話になり、まことにありがとうございます。
Expressエントリのデータを更新したいと思っております。

http://documentation.concrete5.org/developers/express/creating-reading-searching-updating-and-deleting-express-entries
を参照し、
Updating Entries
の個所に記載されている、
$sutudent = Express::getEntry(1);
を参考にしております。

現在、Expressエンティティが2つあり、
1つは Memberで、もう一つは food です。
concrete5 へログインしたユーザIDを取り出し、同じユーザIDをもつ
food エンティティの該当するエントリを上書き更新したいと考えて
おり、以下のようなコードを書いてみました。

$u = new User();
$uid = $u->getUserName();
$entry = Express::getObjectByHandle('food');
$list = new \Concrete\Core\Express\EntryList($entry);
$list->filterByUserida($uid);
$results = $list->getResults();

//Expressへ登録するデータ

if (count($results)){
$savedata = Express::getEntry(?);
$savedata->setUsernamea($this->post('username'));
$savedata->setPrefa($this->post('pref'));
$savedata->setQa1($this->post('q1'));
$savedata = Express::refresh($savedata);
}

ここで、$savedata = Express::getEntry(?); のカッコ内に何を充当
させればよいかで悩んでおります。
food エンティティで、該当するユーザIDに紐づくエントリーIDの
取得をしないといけないと思うのですが、その方法が分かりません。

ぜひご教示ください。
どうぞよろしくお願い致します。

【開発環境】
# concrete5 Version
Core Version - 8.5.4
Version Installed - 8.5.4
Database Version - 20200609145307

# Database Information
Version: 5.1.73
SQL Mode:

# concrete5 Packages
None

# concrete5 Overrides
blocks/external_form/form/controller/tkp_menu.php, blocks/external_form/form/controller/tkp_enq_a.php, blocks/external_form/form/controller, blocks/external_form/form/tkp_menu.php, blocks/external_form/form/tkp_enq_a.php, blocks/external_form/form, blocks/external_form

# concrete5 Cache Settings
Block Cache - On
Overrides Cache - On
Full Page Caching - Off
Full Page Cache Lifetime - Every 6 hours (default setting).

# Server Software
Apache

# Server API
apache2handler

# PHP Version
7.1.33

# PHP Extensions
apache2handler, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, imap, intl, json, ldap, libxml, mbstring, mcrypt, mysqli, mysqlnd, odbc, openssl, pcre, PDO, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite, pgsql, Phar, posix, pspell, recode, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, wddx, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib

# PHP Settings
max_execution_time - 3600
log_errors_max_len - 4096
max_file_uploads - 100
max_input_nesting_level - 64
max_input_time - 60
max_input_vars - 1000
memory_limit - 128M
post_max_size - 384M
sql.safe_mode - Off
upload_max_filesize - 256M
ldap.max_links - Unlimited
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
odbc.max_links - Unlimited
odbc.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
pgsql.max_links - Unlimited
pgsql.max_persistent - Unlimited
session.cache_limiter - no value
session.gc_maxlifetime - 7200
soap.wsdl_cache_limit - 5
opcache.max_accelerated_files - 4000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5

タグ:

Re: ExpressエンティティのエントリーID取得について

2020年8月21日 at 15:54
いつもお世話になっております。

先ほど質問させていただいた件で、恐れ入ります。
自己解決いたしました。

昨日、菱川さまにご教示いただいた、ドキュメントを再度見直し、
以下のようにコードを追加したところ、正常にupdateできました。
ありがとうございました。

public function action_submit(){
//Expressへのデータ上書きと、メール送信
$u = new User();
$uid = $u->getUserName();
$entry = Express::getObjectByHandle('food');
$list = new \Concrete\Core\Express\EntryList($entry);
$list->filterByUserida($uid);
$results = $list->getResults();

//Expressへ登録するデータ

if (count($results)){
foreach ($results as $entrydata){
$entid = $entrydata->getId();
$savedata = Express::getEntry($entid);
$savedata->setUsernamea($this->post('username'));
$savedata->setPrefa($this->post('pref'));
$savedata->setQa1($this->post('q1'));

$savedata = Express::refresh($savedata);
$this->set('response', t('データの登録が正常に完了しました。メールをご確認ください。'));
}
return true;