/** * @param array $options * * @return LazyLoader */ public function getLazyLoader(array $options) { $fk = $this->getForeignKey(); $pk = $this->owner->getPrimaryKey(); $ids = $options['ids']; $with = $options['with']; $callback = $options['callback']; $immediate = $options['immediate']; $select = new Select($this->compiler, $this->model->getTable()); $select->where($fk)->in($ids); if ($callback !== null) { $callback($select); } $query = (string) $select; $params = $select->getCompiler()->getParams(); return new LazyLoader($this->connection, $query, $params, $with, $immediate, $this->isReadOnly, $this->hasMany(), get_class($this->model), $fk, $pk); }
public function getLazyLoader(array $options) { $fk = $this->getForeignKey(); $pk = $this->owner->getPrimaryKey(); $ids = $options['ids']; $with = $options['with']; $callback = $options['callback']; $immediate = $options['immediate']; $junctionTable = $this->getJunctionTable(); $junctionKey = $this->getJunctionKey(); $joinTable = $this->model->getTable(); $joinColumn = $this->model->getPrimaryKey(); $select = new Select($this->compiler, $junctionTable); $linkKey = 'hidden_' . $junctionTable . '_' . $fk; $select->join($joinTable, function ($join) use($junctionTable, $junctionKey, $joinTable, $joinColumn) { $join->on($junctionTable . '.' . $junctionKey, $joinTable . '.' . $joinColumn); })->where($junctionTable . '.' . $fk)->in($ids)->select(array($joinTable . '.*', $junctionTable . '.' . $fk => $linkKey)); if ($callback !== null) { $callback($select); } $query = (string) $select; $params = $select->getCompiler()->getParams(); return new LazyLoader($this->connection, $query, $params, $with, $immediate, $this->isReadOnly, $this->hasMany(), get_class($this->model), $linkKey, $pk); }