lithium\data\model\Relationship::_strategies()

protected method

Strategies used to query related objects, indexed by key.

Source

	protected function _strategies() {
		return [
			static::LINK_EMBEDDED => function($object, $relationship) {
				$fieldName = $relationship->fieldName();
				return $object->{$fieldName};
			},
			static::LINK_CONTAINED => function($object, $relationship) {
				$isArray = ($relationship->type() === "hasMany");
				return $isArray ? $object->parent()->parent() : $object->parent();
			},
			static::LINK_KEY => function($object, $relationship, $options) {
				$model = $relationship->to();
				$method = ($relationship->type() === "hasMany") ? 'all' : 'first';
				if (!$query = $relationship->query($object)) {
					return $method === 'first' ? null : $model::create([], ['class' => 'set']);
				}
				return $model::$method(Set::merge((array) $query, (array) $options));
			},
			static::LINK_KEY_LIST  => function($object, $relationship, $options) {
				$model = $relationship->to();
				if (!$query = $relationship->query($object)) {
					return $model::create([], ['class' => 'set']);
				}
				return $model::all(Set::merge((array) $query, (array) $options));
			}
		];
	}