| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- namespace Illuminate\Database\Eloquent\Relations;
- use Illuminate\Database\Eloquent\Collection;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\Relations\Concerns\InteractsWithDictionary;
- use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels;
- class HasOneThrough extends HasManyThrough
- {
- use InteractsWithDictionary, SupportsDefaultModels;
- /**
- * Get the results of the relationship.
- *
- * @return mixed
- */
- public function getResults()
- {
- return $this->first() ?: $this->getDefaultFor($this->farParent);
- }
- /**
- * Initialize the relation on a set of models.
- *
- * @param array $models
- * @param string $relation
- * @return array
- */
- public function initRelation(array $models, $relation)
- {
- foreach ($models as $model) {
- $model->setRelation($relation, $this->getDefaultFor($model));
- }
- return $models;
- }
- /**
- * Match the eagerly loaded results to their parents.
- *
- * @param array $models
- * @param \Illuminate\Database\Eloquent\Collection $results
- * @param string $relation
- * @return array
- */
- public function match(array $models, Collection $results, $relation)
- {
- $dictionary = $this->buildDictionary($results);
- // Once we have the dictionary we can simply spin through the parent models to
- // link them up with their children using the keyed dictionary to make the
- // matching very convenient and easy work. Then we'll just return them.
- foreach ($models as $model) {
- if (isset($dictionary[$key = $this->getDictionaryKey($model->getAttribute($this->localKey))])) {
- $value = $dictionary[$key];
- $model->setRelation(
- $relation, reset($value)
- );
- }
- }
- return $models;
- }
- /**
- * Make a new related instance for the given model.
- *
- * @param \Illuminate\Database\Eloquent\Model $parent
- * @return \Illuminate\Database\Eloquent\Model
- */
- public function newRelatedInstanceFor(Model $parent)
- {
- return $this->related->newInstance();
- }
- }
|