join 关联查询

关联查询需要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);
}

join关联