如何使用FriendsOfCake搜索CakePHP 3过滤关联的HABTM数据

前夕

插入: FriendsOfCake/Search

CakePHP: 3.1.4

我正在使用插件过滤带有表单的index.ctp视图数据。这个类似的问题:如何对关联的数据进行过滤是关于一个belongsTo关联。我的问题特别是关于关联的HABTM数据,其中关联表是通过joinTable而不是直接链接的。在这种情况下,无法在Model中正常进行以下设置:

->value('painting', [
    field' => $this->Paintings->target()->aliasField('id')
)]

我的表设置如下:

  • 门票属于许多绘画
  • 绘画属于很多门票
  • joinTable tickets_paintings

这是主要设置:

class TicketsTable extends Table
{
    public function initialize(array $config)
    {
       ...

       $this->belongsToMany('Paintings', [
        'foreignKey' => 'ticket_id',
        'targetForeignKey' => 'painting_id',
        'joinTable' => 'tickets_paintings'
       ]);
    }

   public function searchConfiguration()
   {
        $search = new Manager($this);

        $search->value('status', [
                'field' => $this->aliasField('active'),
            ])->like('member_name', [
               'field' => $this->Members->target()->aliasField('surname'),
               'filterEmpty' => true
            ])->value('painting', [
              'field' => $this->Paintings->target()->aliasField('id'),  // not working
            ]);

        return $search;

    }
class TicketsController extends AppController
{
    public function index()
    {
    $query = $this->Tickets
        ->find('search', 
            $this->Tickets->filterParams($this->request->query))
        ->contain(['Members', 'Paintings', 'Appointments']);

    ...
    }

其他所有内容均正常运行,并且在我进行过滤等操作时将参数添加到URL,因此,我仅将某些必须错的部分放在其中。

过滤后出现错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Paintings.id' in 'where clause'

仅在“票证”视图中显示“绘画”表中的数据时包含项才能正常工作。

但是在SQL查询的代码中,我可以看到,除了Paintings表之外,所有包含的表(Members,Appoinments)都已连接到该查询中,因此很明显它找不到列...而且我猜它不能真正地无论如何直接将其加入,因为它们仅通过joinTable连接。

我是CakePHP的新手,在这里我真的无法弄清楚自己在做什么错,因此希望有人可以帮我一点忙。

我必须在插件设置中使用其他语法吗?我必须以其他方式设置表格吗?或者,如何准确地告诉查询将habtm相关表合并到搜索中?

谢谢!

ndm

可用的搜索方法取决于主查询中可用的字段(hasMany并且belongsToMany正在单独的查询中检索关联)。

虽然您可以在控制器中手动将其加入,但使用callback-或finder-filter可能是更好的方法,但您可以在模型层中修改查询,并且可以轻松地Query::matching()用于按关联数据进行过滤。

这是一个(未试用的)示例,应该给您提示:

use Cake\ORM\Query;
use Search\Type\Callback; // This changed in master recently
                          // now it's Search\Model\Filter\Callback

// ...

public function searchConfiguration()
{
    $search = new Manager($this);

    $search
        // ...
        ->callback('painting', [
            'callback' => function (Query $query, array $args, Callback $type) {
                return $query
                    ->distinct($this->aliasField('id'))
                    ->matching('Paintings', function (Query $query) use ($args) {
                        return $query
                            ->where([
                                $this->Paintings->target()->aliasField('id') => $args['painting']
                            ]);
                    });
            }
        ]);

    return $search;

}

也可以看看

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用CakePHP 3.1.0的FriendsOfCake Search插件过滤关联数据

来自分类Dev

CakePHP HABTM仅查找关联的模型数据

来自分类Dev

CakePHP显示HABTM关联

来自分类Dev

HABTM关联未保存-CakePHP

来自分类Dev

CakePHP 3检索关联的数据

来自分类Dev

CakePHP保存HABTM数据

来自分类Dev

无法通过Friendsofcake安装CakePHP的搜索插件

来自分类Dev

使用2个HABTM和1个hasMany关联保存数据

来自分类Dev

无法编辑与 CakePHP 的 HABTM 关联中的属性

来自分类Dev

Cakephp 3,更新关联的属于数据

来自分类Dev

CakePHP 3删除特定的关联数据

来自分类Dev

CakePHP3:如何使用全文本索引进行文本搜索

来自分类Dev

使用Cakephp 3保存关联

来自分类Dev

使用Cakephp 3保存关联

来自分类Dev

使用工厂女孩创建HABTM关联

来自分类Dev

在 Rails 中使用空关联过滤 AJAX 数据表

来自分类Dev

在 CakePHP 3 中使用动态 AJAX 加载对关联查询进行分页和搜索

来自分类Dev

尝试在保存时在CakePHP HABTM关系中保存重复的关联

来自分类Dev

CakePHP:保存HABTM数据MySQL错误

来自分类Dev

如何过滤关联对象?

来自分类Dev

CakePHP如何搜索“用户”数据库表?

来自分类Dev

如何从CakePHP 3.x的关联表中接收数据作为对象(当前以数组形式接收)

来自分类Dev

如何在CakePHP 3中提取数据并将关联显示为多选复选框?

来自分类Dev

如何从CakePHP 3.x的关联表中接收数据作为对象(当前以数组形式接收)

来自分类Dev

使用cakephp 3从不同的数据库检索关联的模型

来自分类Dev

在cakephp 3中使用concat字段进行搜索

来自分类Dev

如何在FriendsOfCake / Search插件中搜索日期时间类型?

来自分类Dev

使用PG搜索gem时,如何按结果关联过滤结果?

来自分类Dev

如何在cakephp 3中获取数据表搜索键?

Related 相关文章

  1. 1

    如何使用CakePHP 3.1.0的FriendsOfCake Search插件过滤关联数据

  2. 2

    CakePHP HABTM仅查找关联的模型数据

  3. 3

    CakePHP显示HABTM关联

  4. 4

    HABTM关联未保存-CakePHP

  5. 5

    CakePHP 3检索关联的数据

  6. 6

    CakePHP保存HABTM数据

  7. 7

    无法通过Friendsofcake安装CakePHP的搜索插件

  8. 8

    使用2个HABTM和1个hasMany关联保存数据

  9. 9

    无法编辑与 CakePHP 的 HABTM 关联中的属性

  10. 10

    Cakephp 3,更新关联的属于数据

  11. 11

    CakePHP 3删除特定的关联数据

  12. 12

    CakePHP3:如何使用全文本索引进行文本搜索

  13. 13

    使用Cakephp 3保存关联

  14. 14

    使用Cakephp 3保存关联

  15. 15

    使用工厂女孩创建HABTM关联

  16. 16

    在 Rails 中使用空关联过滤 AJAX 数据表

  17. 17

    在 CakePHP 3 中使用动态 AJAX 加载对关联查询进行分页和搜索

  18. 18

    尝试在保存时在CakePHP HABTM关系中保存重复的关联

  19. 19

    CakePHP:保存HABTM数据MySQL错误

  20. 20

    如何过滤关联对象?

  21. 21

    CakePHP如何搜索“用户”数据库表?

  22. 22

    如何从CakePHP 3.x的关联表中接收数据作为对象(当前以数组形式接收)

  23. 23

    如何在CakePHP 3中提取数据并将关联显示为多选复选框?

  24. 24

    如何从CakePHP 3.x的关联表中接收数据作为对象(当前以数组形式接收)

  25. 25

    使用cakephp 3从不同的数据库检索关联的模型

  26. 26

    在cakephp 3中使用concat字段进行搜索

  27. 27

    如何在FriendsOfCake / Search插件中搜索日期时间类型?

  28. 28

    使用PG搜索gem时,如何按结果关联过滤结果?

  29. 29

    如何在cakephp 3中获取数据表搜索键?

热门标签

归档