fastadmin a表关联b表,b表关联c表

这篇博客深入探讨了在Fastadmin框架下如何处理A表与B表的一对一关联,以及B表与C表之间的关联。通过分析`model/drivercar.php`和`controller/drivercar.php`中的代码示例,博主详细解释了一对一关联模型`OneToOne.php`的实现方法,为读者展示了如何在实际项目中进行多表关联查询和操作。

model/drivercar.php

public function user()
    {
        return $this->belongsTo('User', 'driver_id', 'id', [], 'INNER')->setEagerlyType(0);
    }
    public function company(){
        return $this->belongsTo('Company','user.company_id','id',[], 'LEFT')->setEagerlyType(0);
    }
    public function team(){
        return $this->belongsTo('Team','user.team_id','id',[], 'LEFT')->setEagerlyType(0);
    }

controller/drivercar.php

if ($this->request->isAjax()) {
            //如果发送的来源是Selectpage,则转发到Selectpage
            if ($this->request->request('keyField')) {
                return $this->selectpage();
            }
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();

            $list = $this->model
                    ->with(['user','company','team'])
                    ->where($where)
                    ->where($where_auth)
                    ->order($sort, $order)
                    ->paginate($limit);

            foreach ($list as $row) {
                $row->visible(['id','driver_id','car_number','number_limit','car_type','car_brand','car_seat','car_topwindow','front_images','odb_number','jiaoqiangxian_endtime','shangyexian_endtime','chejian_endtime']);
                $row->visible(['user']);
				$row->getRelation('user')->visible(['username','truename','team_id','company_id','gender','idcard_num','mobile']);
                $row->visible(['company']);
				$row->getRelation('company')->visible(['name']);
                $row->visible(['team']);
				$row->getRelation('team')->visible(['name']);
            }

            /*$list2 = Db::name('driver_car')
                ->alias('drivercar')
                ->join('user','drivercar.driver_id = user.id','INNER')
                ->join('team','user.team_id = team.id','LEFT')
                ->join('company','user.company_id = company.id','LEFT')
                ->field('drivercar.*,user.username,user.truename,user.team_id,user.company_id,user.gender,user.idcard_num,user.mobile,company.name as company_name,team.name as team_name')
                ->where($where)
                ->where($where_auth)
                ->order($sort, $order)
                ->paginate($limit);*/

            $result = array("total" => $list->total(), "rows" => $list->items());

            return json($result);
        }

OneToOne.php

public function eagerly(Query $query, $relation, $subRelation, $closure, $first)
    {
        $name = Loader::parseName(basename(str_replace('\\', '/', get_class($query->getModel()))));

        if ($first) {
            $table = $query->getTable();
            $query->table([$table => $name]);
            if ($query->getOptions('field')) {
                $field = $query->getOptions('field');
                $query->removeOption('field');
            } else {
                $field = true;
            }
            $query->field($field, false, $table, $name);
            $field = null;
        }

        // 预载入封装
        $joinTable = $this->query->getTable();
        $joinAlias = $relation;
        $query->via($joinAlias);

        //lizhen
        if(strpos($this->foreignKey,'.')){
            $new_foreignKey = $this->foreignKey;
        }else{
            $new_foreignKey = $name . '.' . $this->foreignKey;
        }

        if ($this instanceof BelongsTo) {
            $query->join([$joinTable => $joinAlias], $new_foreignKey . '=' . $joinAlias . '.' . $this->localKey, $this->joinType);
            //$query->join([$joinTable => $joinAlias], $name . '.' . $this->foreignKey . '=' . $joinAlias . '.' . $this->localKey, $this->joinType);
        } else {
            $query->join([$joinTable => $joinAlias], $name . '.' . $this->localKey . '=' . $joinAlias . '.' . $this->foreignKey, $this->joinType);
        }
        //lizhen

        if ($closure) {
            // 执行闭包查询
            call_user_func_array($closure, [ & $query]);
            // 使用withField指定获取关联的字段,如
            // $query->where(['id'=>1])->withField('id,name');
            if ($query->getOptions('with_field')) {
                $field = $query->getOptions('with_field');
                $query->removeOption('with_field');
            }
        } elseif (isset($this->option['field'])) {
            $field = $this->option['field'];
        }
        $query->field(isset($field) ? $field : true, false, $joinTable, $joinAlias, $relation . '__');
    }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值