3

在 Joomla 2.5 中,如何在 SQL 查询中使用条件“WHERE”执行表单字段类型“SQL”?

例子:

<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE {condition}" />

joomla 文档中没有关于此的任何内容。我找到了这个链接,但它没有提到在 SQL 查询(http://docs.joomla.org/SQL_form_field_type)中使用 WHERE 条件的任何内容。

有人可以告诉我这在Joomla中是否可行吗?

我有一张带有产品的桌子和一张带有与品牌相关的商店的桌子。如果我编辑一家商店,我想显示一个包含该商店品牌所有产品的组合框。那可能吗?SELECT * FROM #__products WHERE brand = {与我选择进行编辑的商店关联的品牌 ID} 这可能吗?

我可以使用自定义表单字段来做到这一点=)

http://docs.joomla.org/Creating_a_custom_form_field_type

谢谢RHR的回答!

4

6 回答 6

3

这是我的解决方案:

您可以通过执行以下操作完全替换查询:

1)定义你的查询:

$query = 'SELECT * from table_name WHERE table_id = '.$your_value;

2)更新您的表单字段属性:

$this->form->setFieldAttribute('field_name', 'query', $query);
于 2015-11-19T03:34:06.700 回答
1

是的,有可能

我使用的代码

<fields name="request">
 <fieldset name="request" >
<field name="id" type="sql" query="SELECT id , title FROM #__table name where published=1" multiple="single" key_field="id" value_field="title" class="inputbox" label="fieldlabel" description="fielddesc" required="true" />
</fieldset> 
</fields>

您可以通过另一种方式作为自定义字段执行此操作

于 2012-09-29T04:30:18.387 回答
1

只是有同样的问题。经过一番挖掘,我发现它实际上是可能的。

1. 步骤 - 你需要一个自定义表单域:(我将其命名为 vssql.php)

JFormHelper::loadFieldClass('sql');

class JFormFieldVSSQL extends JFormFieldSQL
{
    /**
     * The form field type.
     */
    public $type = 'VSSQL';

    /**
     * Overrides parent's method
     */
    protected function getOptions()
    {
        // Get the ID
        $query_id = $this->form->getField((string) $this->element['query_id']);

        // Override query
        $this->element['query'] = str_replace('{query_id}', (string) $query_id->value, (string) $this->element['query']);

        return parent::getOptions();
    }
}

2. 步骤 - 你需要知道热才能使用它:

在您的 JForm xml 中添加:

  <字段
    名称=“字段名称”
    类型="vssql"
    query_id="user_id"
    query="SELECT id AS value, CONCAT(street,' ',city) AS 地址 FROM #__addresses WHERE user_id = {query_id}"
    label="用户地址列表"
    必需="必需" />

在您的 SQL 查询中,占位符{query_id}将替换为query_id中指定的参数的实际值,在本例中为 *user_id*。这将从分配给给定用户的某个表中返回地址列表

于 2013-05-23T20:33:59.637 回答
1

@WooDzu 解决方案的一些更新:

class JFormFieldICategory extends JFormFieldSQL
{

    public $type = 'ICategory';

    /**
     * Overrides parent's method
     */
    protected function getOptions()
    {
        // Get the ID
        $cat_id = $this->form->getField((string) $this->element['cat_id']);

        // Override query
        $this->query = str_replace('{cat_id}', (string) $cat_id->value, (string) $this->element['query']);
        echo $this->query.' test '; //exit();

        return parent::getOptions();
    }

}

类型应该是公共的,并且查询应该分配给 $this->query。效果很好!

于 2015-09-29T11:18:49.603 回答
0

这适用于 Joomla 2.5+ 和 3.x+ 中的我(我用它从 #__extensions 表中选择用户插件)作为 WHERE 条件:

<field name="plugin" type="sql" query="SELECT extension_id as value, name as title FROM #__extensions WHERE type = 'plugin' AND folder = 'user'" />
于 2013-05-24T20:52:32.870 回答
0

我有同样的问题。您不能根据变量创建 where 条件,只能基于常量:(

但是您可以使用 form->setField 函数更改表单字段并重新加载视图中的字段。多亏了这一点,您可以在字段 sql 中创建任何条件。

$NewFieldDefinition=new SimpleXMLElement('<field name="catid" type="sql" query="SELECT id, title FROM #__table WHERE title='.$condition.'" />');
$this->form->setField($NewFieldDefinition, null, true);
于 2015-05-21T10:30:44.823 回答