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

3182

被折叠的 条评论
为什么被折叠?



