示例#1
0
 /**
  * [[@doctodo method_description:extractValue]].
  *
  * @param [[@doctodo param_type:caller]]       $caller       [[@doctodo param_description:caller]]
  * @param [[@doctodo param_type:foreignModel]] $foreignModel [[@doctodo param_description:foreignModel]] [optional]
  * @param [[@doctodo param_type:localModel]]   $localModel   [[@doctodo param_description:localModel]] [optional]
  *
  * @return [[@doctodo return_type:extractValue]] [[@doctodo return_description:extractValue]]
  */
 public function extractValue($caller, $foreignModel = null, $localModel = null)
 {
     if (is_null($foreignModel)) {
         $foreignModel = $this->foreignModel;
     }
     $foreignField = $this->foreignField;
     $value = null;
     if (isset($this->value)) {
         if (is_callable($this->value)) {
             $value = call_user_func($this->value, $foreignModel, $this);
         } else {
             $value = $this->value;
         }
     } elseif (isset($foreignField)) {
         if (is_callable($foreignField)) {
             $value = call_user_func($foreignField, $foreignModel);
         } elseif (!is_object($foreignField) && is_array($foreignField)) {
             $value = $caller->buildLocalAttributes($foreignModel, $localModel, $caller->buildMap($foreignField));
         } elseif (is_string($foreignField)) {
             $value = isset($foreignModel->{$foreignField}) ? $foreignModel->{$foreignField} : null;
         }
     }
     if (is_object($value) && $value instanceof DataItem) {
         $object = $value->handle();
         if ($object) {
             $value = $object->primaryKey;
         } else {
             $value = null;
         }
     }
     if (!is_array($value)) {
         if (isset($this->filter)) {
             $value = call_user_func($this->filter, $value);
         }
         $value = $this->dataSource->universalFilter($value);
     }
     return $value;
 }