Added support for 'nameFromSelect' in relation form fields

This commit is contained in:
Joel E. Svensson 2015-11-03 14:34:16 +01:00
parent 0fa33422a4
commit e992e95ae3
1 changed files with 26 additions and 4 deletions

View File

@ -5,6 +5,7 @@ use Backend\Classes\FormWidgetBase;
use ApplicationException;
use SystemException;
use Illuminate\Database\Eloquent\Relations\Relation as RelationBase;
use DB;
/**
* Form Relationship
@ -29,6 +30,11 @@ class Relation extends FormWidgetBase
*/
public $descriptionFrom = 'description';
/**
* @var string Model SQL column selection to use for the name reference
*/
public $nameFromSelect;
/**
* @var string Empty value to use if the relation is singluar (belongsTo)
*/
@ -57,6 +63,7 @@ class Relation extends FormWidgetBase
'nameFrom',
'descriptionFrom',
'emptyOption',
'nameFromSelect',
]);
}
@ -111,12 +118,27 @@ class Relation extends FormWidgetBase
// by joining its pivot table. Remove all joins from the query.
$query->getQuery()->getQuery()->joins = [];
$treeTraits = ['October\Rain\Database\Traits\NestedTree', 'October\Rain\Database\Traits\SimpleTree'];
if (count(array_intersect($treeTraits, class_uses($relationModel))) > 0) {
$field->options = $query->listsNested($this->nameFrom, $relationModel->getKeyName());
/**
* The nameFromSelect config takes precedence over nameFrom.
* A virtual column called "selection" will contain the result.
*/
if ($this->nameFromSelect) {
$nameFrom = 'selection';
$query = $query->select(
DB::raw($this->nameFromSelect . ' AS ' . $nameFrom),
$relationModel->getKeyName()
);
}
else {
$field->options = $query->lists($this->nameFrom, $relationModel->getKeyName());
$nameFrom = $this->nameFrom;
}
$treeTraits = ['October\Rain\Database\Traits\NestedTree', 'October\Rain\Database\Traits\SimpleTree'];
if (count(array_intersect($treeTraits, class_uses($relationModel))) > 0) {
$field->options = $query->listsNested($nameFrom, $relationModel->getKeyName());
}
else {
$field->options = $query->lists($nameFrom, $relationModel->getKeyName());
}
return $field;