1

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

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

不幸的是,该searchable位不起作用,我知道这是因为我使用transaction[user][email]而不是使用relationandselect作为列的一部分。

我的问题是,我可以以某种方式使用relationselect当我深入 2 关系时,像这样,还是我需要不同的方法?

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

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

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

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

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

4

2 回答 2

3

嗯,我在本地尝试了一个演示,它工作得很好。

在您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,希望这会奏效

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

于 2018-01-24T22:07:58.400 回答
0

此解决方案存在问题,当您尝试搜索时,它会运行对计数记录的查询并抛出异常“未找到列”,因为在计数查询中它没有选择语句而只有“选择计数...”我的情况看起来像 - 列未找到:1054 Unknown column 'cruises.pagetitle' in 'where子句'(SQL:cruises从左连接中选择计数(*)cr_cab作为聚合。= 。左连接。= 。哪里。.. 或 (lower(cruises.pagetitle) LIKE %thaty%))))" 在 C:\xampp\htdocs\12knots_october\vendor\laravel\framework\src\Illuminate\Database\Connection.php 的第 664 行crccrccab_idcruisesidchartercruisechrcchrcidcrccruise_id

columns.yaml 页面标题:标签:'Connected Cruise' 类型:文本默认值:无 可搜索:true 可排序:true

    public function listExtendQueryBefore($query) {

    $query->addSelect('chrc.pagetitle');
    $query->leftJoin('cr_cab as crc', 'crc.cab_id', '=', 'cruises.id');
    $query->leftJoin('chartercruise as chrc', 'chrc.id', '=', 
                                                         'crc.cruise_id');

     }
于 2020-02-18T10:03:36.137 回答