我columns.yaml
模型的Invoice
文件我有以下一栏:
transaction[user][email]:
label: Login email
type: text
searchable: true // doesn't work!
不幸的是,searchable
位不起作用,我理解这是因为我使用transaction[user][email]
而不是relation
和select
作为列。
我的问题是,我可以以某种方式使用relation
和select
,当我深入了解这两个关系时,或者我需要采用不同的方法吗?
我的Invoice
模型定义了这种关系:
public $morphOne = [
'transaction' => ['Namespace\Plugin\Models\Transaction', 'name' => 'transactionable']
];
我的Transaction
模型定义了这种关系:
public $belongsTo = [
'user' => ['Rainlab\User\Models\User'],
];
因此,基本上,我希望能够在其中一列中显示发票的后端列表,并显示用户的电子邮件地址,并且还可以在搜索框中输入电子邮件地址以便过滤该列表仅适用于与该电子邮件地址的用户关联的发票。
答案 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_id
。cruises
在id
上以chartercruise
的身份加入chrc
。chrc
= {{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