bring back model function and cleanup
This commit is contained in:
@@ -309,6 +309,34 @@ class Conductor
|
|||||||
* @return array The processed and transformed model data.
|
* @return array The processed and transformed model data.
|
||||||
*/
|
*/
|
||||||
final public static function includeModel(Request $request, string $key, mixed $model)
|
final public static function includeModel(Request $request, string $key, mixed $model)
|
||||||
|
{
|
||||||
|
$fields = [];
|
||||||
|
|
||||||
|
if ($request !== null && $request->has('fields') === true) {
|
||||||
|
$requestFields = $request->input('fields');
|
||||||
|
if ($requestFields !== null) {
|
||||||
|
$requestFields = explode(',', $requestFields);
|
||||||
|
if(in_array($key, $requestFields) === false) {
|
||||||
|
foreach($requestFields as $field) {
|
||||||
|
if(strpos($field, $key . '.') === 0) {
|
||||||
|
$fields[] = substr($field, strlen($key) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return static::model($fields, $model);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the conductor on a Model with the data stored in a Request.
|
||||||
|
*
|
||||||
|
* @param mixed $fields The fields to show.
|
||||||
|
* @param Model|null $model The model.
|
||||||
|
* @return array The processed and transformed model data.
|
||||||
|
*/
|
||||||
|
final public static function model(mixed $fields, mixed $model)
|
||||||
{
|
{
|
||||||
if ($model === null) {
|
if ($model === null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -317,36 +345,25 @@ class Conductor
|
|||||||
$conductor_class = get_called_class();
|
$conductor_class = get_called_class();
|
||||||
$conductor = new $conductor_class();
|
$conductor = new $conductor_class();
|
||||||
|
|
||||||
$fields = $conductor->fields(new $conductor->class());
|
$modelFields = $conductor->fields(new $conductor->class());
|
||||||
|
|
||||||
// Limit fields
|
// Limit fields
|
||||||
$limitFields = $fields;
|
$limitFields = $modelFields;
|
||||||
if ($request !== null && $request->has('fields') === true) {
|
if($fields instanceof Request) {
|
||||||
$requestFields = $request->input('fields');
|
if ($fields !== null && $fields->has('fields') === true) {
|
||||||
if ($requestFields !== null) {
|
$requestFields = $fields->input('fields');
|
||||||
$requestFields = explode(',', $requestFields);
|
if ($requestFields !== null) {
|
||||||
if(in_array($key, $requestFields) === false) {
|
$limitFields = array_intersect(explode(',', $requestFields), $modelFields);
|
||||||
$filterFields = [];
|
|
||||||
|
|
||||||
foreach($requestFields as $field) {
|
|
||||||
if(strpos($field, $key . '.') === 0) {
|
|
||||||
$filterFields[] = substr($field, strlen($key) + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(count($filterFields) > 0) {
|
|
||||||
$limitFields = array_intersect($filterFields, $fields);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if(is_array($fields) && count($fields) > 0) {
|
||||||
|
$limitFields = array_intersect($fields, $modelFields);
|
||||||
}
|
}
|
||||||
|
|
||||||
$includes = array_intersect($limitFields, $conductor->includes);
|
|
||||||
|
|
||||||
if (empty($limitFields) === false) {
|
if (empty($limitFields) === false) {
|
||||||
$modelAppends = $model->getAppends();
|
$modelAppends = $model->getAppends();
|
||||||
|
|
||||||
foreach(array_diff($fields, $limitFields) as $attribute) {
|
foreach(array_diff($modelFields, $limitFields) as $attribute) {
|
||||||
$key = array_search($attribute, $modelAppends);
|
$key = array_search($attribute, $modelAppends);
|
||||||
if ($key !== false) {
|
if ($key !== false) {
|
||||||
unset($modelAppends[$key]);
|
unset($modelAppends[$key]);
|
||||||
@@ -358,10 +375,7 @@ class Conductor
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Includes
|
// Includes
|
||||||
$includes = $conductor->includes;
|
$includes = array_intersect($limitFields, $conductor->includes);
|
||||||
if ($request !== null && $request->has('includes') === true) {
|
|
||||||
$includes = explode(',', $request->input('includes', ''));
|
|
||||||
}
|
|
||||||
$conductor->applyIncludes($model, $includes);
|
$conductor->applyIncludes($model, $includes);
|
||||||
|
|
||||||
// Transform
|
// Transform
|
||||||
|
|||||||
Reference in New Issue
Block a user