0

我有 2 个模型,用户和实体。我需要在我的实体页面上,有分页,和一个简单的搜索功能。搜索功能将过滤实体,但它过滤的数据是用户模型中的虚拟字段。

实体模型:

public $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
 };

User 模型中的虚拟字段:

 public $virtualFields = array("searchFor" => "CONCAT(User.first_name, ' ',User.last_name, ' ',User.email)");

以及实体控制器内的条件:

 $conditions["User.searchFor LIKE"] = "%".str_replace(" ","%",$this->passedArgs["searchFor"])."%";
 $this->paginate = array(
                'conditions' => $conditions,
                'order' => array('Re.created' => 'DESC'),
                'limit' => 20
            );

据我所知,这是不可能的,因为我不能在关联模型的查询中使用 virtualFields,并且它说我必须在“运行时”中使用它,但我真的不明白该怎么做,或者怎么做在这种情况下。有什么想法或方法可以让它发挥作用吗?

4

2 回答 2

0

您可以尝试像这样将 virtualField 附加到 Entity 模型

$this->Entity->virtualFields['searchFor'] = $this->Entity->User->virtualFields['searchFor'];

但是您必须确保完成连接而不是 2 个查询。

我相信它在书中讨论过。

编辑:书页

于 2012-05-09T14:44:16.423 回答
0

为此,我需要对关联模型中的连接字符串进行搜索。通常这可以使用 cake 中的 Virtualfields 来完成,但 cake 不支持在搜索中使用关联模型中的 virtualField。

看到 2 个模型已经与 belongsTo 关联,我只是将条件更改为:

 "conditions" => "CONCAT(User.first_name, ' ',User.last_name, ' ',User.email) LIKE" => "%".str_replace(" ","%",$this->passedArgs["searchFor"])."%"

可能不是最优雅的解决方案,但它确实有效。

于 2012-05-14T13:36:56.103 回答