/** * Join mapped table(s). * * @param \Sofa\Eloquence\Builder $query * @param string $target * @return string */ protected function joinMapped(Builder $query, $target) { $query->prefixColumnsForJoin(); $parent = $this; foreach (explode('.', $target) as $segment) { list($table, $parent) = $this->joinSegment($query, $segment, $parent); } return $table; }
/** * Join meta attributes table. * * @param \Sofa\Eloquence\Builder $query * @param string $column * @return string */ protected function joinMeta(Builder $query, $column) { $query->prefixColumnsForJoin(); $alias = $this->generateMetaAlias(); $table = (new Attribute())->getTable(); $query->leftJoin("{$table} as {$alias}", function ($join) use($alias, $column) { $join->on("{$alias}.metable_id", '=', $this->getQualifiedKeyName())->where("{$alias}.metable_type", '=', $this->getMorphClass())->where("{$alias}.meta_key", '=', $column); }); return $alias; }