|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
|
|
|
|
class BaseForm extends SoftDeletesModel
|
|
|
|
|
|
{
|
|
|
|
|
|
protected $casts = [];
|
|
|
|
|
|
protected $appends = [];
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
|
|
{
|
|
|
|
|
|
parent::__construct();
|
|
|
|
|
|
// 设置表
|
|
|
|
|
|
$this->setTable(request('table_name'));
|
|
|
|
|
|
// 设置关联关系
|
|
|
|
|
|
$this->relation();
|
|
|
|
|
|
// 设置json转数组字段
|
|
|
|
|
|
$this->casts = $this->jsonToArray();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建人关联
|
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasOne
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function admin()
|
|
|
|
|
|
{
|
|
|
|
|
|
return $this->hasOne(Admin::class, 'id', 'admin_id');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 关联创建部门
|
|
|
|
|
|
* @return \Illuminate\Database\Eloquent\Relations\HasOne
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function department()
|
|
|
|
|
|
{
|
|
|
|
|
|
return $this->hasOne(Department::class, 'id', 'department_id');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取所有关联关系
|
|
|
|
|
|
* $raw=true返回原始设置,false只输出关联关系名字数组
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function allRelationFields($raw = false)
|
|
|
|
|
|
{
|
|
|
|
|
|
$customFormRelation = request('customForm')->relation;
|
|
|
|
|
|
if (empty($customFormRelation)) return [];
|
|
|
|
|
|
$customFormRelation = $customFormRelation->filter(function ($item) {
|
|
|
|
|
|
return !empty($item->link_table_name)
|
|
|
|
|
|
&& !empty($item->link_relation)
|
|
|
|
|
|
&& !empty($item->local_key)
|
|
|
|
|
|
&& !empty($item->foreign_key)
|
|
|
|
|
|
&& !empty($item->link_with_name);
|
|
|
|
|
|
});
|
|
|
|
|
|
// 输出原始数据
|
|
|
|
|
|
if ($raw) return $customFormRelation;
|
|
|
|
|
|
$customFormRelation = $customFormRelation->pluck('link_with_name')->toArray();
|
|
|
|
|
|
$baseRelation = ['admin', 'department'];
|
|
|
|
|
|
return array_merge($baseRelation, $customFormRelation);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 构建关联关系
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function relation()
|
|
|
|
|
|
{
|
|
|
|
|
|
$customFormRelations = request('customForm')->relation;
|
|
|
|
|
|
if (empty($customFormRelations)) return true;
|
|
|
|
|
|
// 去除无效的关联
|
|
|
|
|
|
$customFormRelations = $customFormRelations->filter(function ($item) {
|
|
|
|
|
|
return !empty($item->link_table_name)
|
|
|
|
|
|
&& !empty($item->link_relation)
|
|
|
|
|
|
&& !empty($item->local_key)
|
|
|
|
|
|
&& !empty($item->foreign_key)
|
|
|
|
|
|
&& !empty($item->link_with_name);
|
|
|
|
|
|
});
|
|
|
|
|
|
foreach ($customFormRelations as $item) {
|
|
|
|
|
|
// 关联其他表数据
|
|
|
|
|
|
self::resolveRelationUsing($item->link_with_name, function ($fromModel) use ($item) {
|
|
|
|
|
|
if ($item->link_table_name == 'uploads') {
|
|
|
|
|
|
// 上传关联
|
|
|
|
|
|
$relatedModel = (new Upload())->newQuery();
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$relatedModel = tableNameToModel($item->link_table_name);
|
|
|
|
|
|
}
|
|
|
|
|
|
return $fromModel->{$item->link_relation}($relatedModel, $this, $item->foreign_key, $item->local_key);
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* json字段转数组
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function jsonToArray()
|
|
|
|
|
|
{
|
|
|
|
|
|
$customFormFields = request('customFormFields');
|
|
|
|
|
|
if (empty($customFormFields)) return [];
|
|
|
|
|
|
$casts = $customFormFields->whereIn('edit_input', CustomFormField::getJsonFieldType())
|
|
|
|
|
|
->pluck('field')
|
|
|
|
|
|
->mapWithKeys(function ($item) {
|
|
|
|
|
|
return [$item => 'json'];
|
|
|
|
|
|
})->toArray();
|
|
|
|
|
|
return $casts;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|