在OctoberCMS中可以搜索深度相关的字段

时间:2018-01-24 16:07:03

标签: octobercms octobercms-backend

columns.yaml模型的Invoice文件我有以下一栏:

transaction[user][email]:
    label: Login email
    type: text
    searchable: true // doesn't work!

不幸的是,searchable位不起作用,我理解这是因为我使用transaction[user][email]而不是relationselect作为列。

我的问题是,我可以以某种方式使用relationselect,当我深入了解这两个关系时,或者我需要采用不同的方法吗?

我的Invoice模型定义了这种关系:

public $morphOne = [
    'transaction' => ['Namespace\Plugin\Models\Transaction', 'name' => 'transactionable']
];

我的Transaction模型定义了这种关系:

public $belongsTo = [
    'user' => ['Rainlab\User\Models\User'],
];

因此,基本上,我希望能够在其中一列中显示发票的后端列表,并显示用户的电子邮件地址,并且还可以在搜索框中输入电子邮件地址以便过滤该列表仅适用于与该电子邮件地址的用户关联的发票。

2 个答案:

答案 0 :(得分:2)

嗯,我在当地尝试了一个演示,它的工作正常。

Controller添加此代码we are going to extend query以添加我们的custom field searchable即使其2 relation deeper

<?php

use Rainlab\User\Models\User;
use Namespace\Plugin\Models\Invoice;
use Namespace\Plugin\Models\Transaction;

... your controller code ...

public function listExtendQuery($query)
{

    $invoiceTableName = (new Invoice)->getTable();
    $transactionTableName = (new Transaction)->getTable();
    $userTableName = (new User)->getTable();

    $query->addSelect($userTableName . '.email as email');

    $query->leftJoin($transactionTableName, $invoiceTableName . '.id', '=', $transactionTableName . '.invoice_id');
    $query->leftJoin($userTableName, $userTableName . '.id', '=', $transactionTableName . '.user_id');

}

...

现在在columns.yaml内添加此

columns:
    id:
        label: id
        type: number
        invisible: false

    ... other columns 

    email:
        label: user_email
        type: text
        default: none
        searchable: true
        select: email

现在你也可以search from email,希望这会有用

如果您收到任何错误,请发表评论。

答案 1 :(得分:0)

此解决方案存在一个问题,当您尝试搜索时,它将运行计数记录查询并引发异常“未找到列”,因为在计数查询中它没有select语句,而只有“ select count .. 。”就我而言,它看起来像- 找不到列:1054“ where子句”中的未知列“ cruises.pagetitle”(SQL:从cruises中聚合count(*)作为{{1}上的cr_cab左联接crc }}。crc = cab_idcruisesid上以chartercruise的身份加入chrcchrc = {{1} }。id,其中...或(lower(cruises.pagetitle)LIKE%thaty%))))“位于C:\ xampp \ htdocs \ 12knots_october \ vendor \ laravel \ framework \ src \ Illuminate的第664行\ Database \ Connection.php

columns.yaml 页面标题: 标签:“互联邮轮” 类型:文字 默认值:无 可搜索:true 可排序:true

crc