for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace hamburgscleanest\DataTables\Models;
use Illuminate\Support\Collection;
/**
* Class Relation
* @package hamburgscleanest\hamburgscleanest\DataTables\Models
*/
class Relation {
/** @var string */
public $name;
public $aggregate = 'first';
* Relation constructor.
* @param string $columnName
* @internal param string $name
public function __construct(string $columnName)
{
$this->name = $this->_extractAggregate($columnName);
}
* @param string $name
* @return string
private function _extractAggregate(string $name): string
$replaced = 0;
$extractedName = preg_replace('/\((.*?)\)/', '#$1', $name, 1, $replaced);
if ($replaced !== 0)
$parts = \explode('#', $extractedName);
$this->aggregate = \mb_strtolower($parts[0]);
$extractedName = $parts[1];
return \mb_substr($extractedName, 0, \mb_strpos($extractedName, '.'));
* @param Collection $relation
public function getValue(string $columnName, Collection $relation): string
$aggregateFunctionSet = $this->aggregate !== 'first';
if ($aggregateFunctionSet)
return $relation->{$this->aggregate}($columnName);
return (string) $relation->first()->{$columnName};