关联查询需要configListField
方法和configListJoin
方法结合使用
#project\app\admin\controller\Category.php
namespace app\admin\controller;
use easyadmin\app\columns\lists\ListDateTime;
use easyadmin\app\columns\lists\ListImage;
use easyadmin\app\columns\lists\ListText;
use easyadmin\app\libs\ListField;
use easyadmin\app\libs\Page;
use think\db\Query;
class Category extends \easyadmin\controller\Admin
{
protected $pageName = '分类';
/**
* 配置列表字段
* @param ListField $list
*/
protected function configListField(ListField $list)
{
$list
->addField('id', 'ID', ListText::class)
//关联字段;关联字段需要写上别名. c 就是 join 指定的别名;
->addField('c.name', '上级分类名称', ListText::class)
->addField('name', '分类名称', ListText::class)
->addField('icon', '图标', ListImage::class)
->addField('time', '创建时间', ListDateTime::class);
}
/**
* 配置关联查询
* @param Query $query thinkphp 的 query, 可使用 thinkphp 的数据库查询方法, 这里主要是join 关联数据表
* @param string $alias 查询主表的别名
*/
protected function configListJoin(Page $page, Query $query, string $alias)
{
//这里就是 thinkphp 的join用法, 详细可参考 thinkphp 的文档
$query->join('category c','c.id='. $alias .'.parent_id');
}
}
如果列表中需要展示关联表中的字段, 需要在configListField
方法中addField
时写上关联表的别名:
#project\app\admin\controller\Category.php
protected function configListField(ListField $list)
{
//关联字段需要写上别名. c 就是 join 指定的别名;
$list->addField('c.name', '上级分类名称', ListText::class);
}