【问题标题】:Add a single field to model using raw SQL使用原始 SQL 将单个字段添加到模型
【发布时间】:2017-11-22 08:08:40
【问题描述】:

我正在为 TYPO3 CMS 8.7.8 开发一个扩展。我正在使用query->statement() 从单个表中选择所有字段,以及从另一个表中选择 1 个字段。我得到了一个带有正确模型的QueryResult,我希望向它们添加 1 个额外的字段。这可能吗?

【问题讨论】:

    标签: typo3 datamapper typo3-8.x typo3-8.7.x


    【解决方案1】:

    您可以使用 ->statement(...) 方法进行 SQL 查询,并且使用普通的 JOIN 命令

    来自documentation

    $result = $query->statement('SELECT * FROM tx_sjroffers_domain_model_offer
    WHERE title LIKE ? AND organization IN ?', array('%climbing%', array(33,47)));
    

    所以你可以在任何你想要的表上做 JOIN(也来自文档的代码)

    LEFT JOIN tx_blogexample_person
    ON tx_blogexample_post.author = tx_blogexample_person.uid
    

    但是你最终会得到来自 mysql 查询的原始数据。如果要将其转换为对象,请使用Property Mapper

    【讨论】:

    • 我的问题是如何将额外的字段放到模型上。我设法更改了模型以适应额外的字段并为该字段添加了 TCA 配置。现在一切正常。
    • @StephanRodemeier 然后您可以创建自己的 TypeConverter 并将该额外字段添加到返回的模型中。看看 PersistentObjectConverter 和类似的东西是如何做到的。
    【解决方案2】:

    您可以在您的 sql 中使用 JOIN statments,如下所示。

    $query = $this->createQuery();
    $sql = 'SELECT single.*,another.field_anme AS fields_name
            FROM
               tx_single_table_name single
            JOIN
               tx_another_table_name another
            ON
               single.fields = another.uid
            WHERE
               O.deleted = 0
            AND O.hidden=0
            AND O.uid=' . $orderId;
    return $query->statement($sql)->execute();
    

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多