public function testMethodColumnWithColumnKeyNotNull() { $this->assertSame(['foo' => 'bar'], ArrayUtils::column(['foo' => 'bar'], null)); $result = ArrayUtils::column([['name' => 'foo'], ['id' => 10, 'name' => 'bar'], ['foo' => 'baz']], 'name', 'id'); $expected = ['foo', 10 => 'bar']; $this->assertSame($expected, $result); }
/** * @param $name * @return null|\Sloths\Db\Model\AbstractModel */ public function getBelongsTo($name) { $schema = $this->getBelongsToSchema($name); $foreignKeyColumn = $schema->getForeignKey(); $model = $schema->getModel(); $primaryKeyColumn = $model->getPrimaryKey(); $tableName = $model->getTableName(); if ($parentCollection = $this->getParentCollection()) { $modelClassName = $schema->getModelClassName(); $foreignKeyIds = $parentCollection->column($foreignKeyColumn); $foreignKeyIds = array_unique($foreignKeyIds); $foreignKeyIds = array_diff($foreignKeyIds, [null]); $select = $model->table()->select()->where($tableName . '.' . $primaryKeyColumn . ' IN (' . implode(', ', $foreignKeyIds) . ')'); $rows = $select->all(); $pairs = ArrayUtils::column($rows, null, $primaryKeyColumn); foreach ($pairs as &$item) { $item = new $modelClassName($item); } foreach ($parentCollection as $model) { $foreignKeyValue = $model->get($foreignKeyColumn); if (isset($pairs[$foreignKeyValue])) { $model->relationData[$name] = $pairs[$foreignKeyValue]; } else { $model->relationData[$name] = null; } } $selfForeignKeyValue = $this->get($foreignKeyColumn); return isset($pairs[$selfForeignKeyValue]) ? $pairs[$selfForeignKeyValue] : null; } else { return $model->first($tableName . '.' . $primaryKeyColumn . ' = ' . $this->get($foreignKeyColumn)); } }
/** * @param $name * @return null|\Sloths\Db\Model\AbstractModel */ public function getHasOne($name) { $schema = $this->getHasOneSchema($name); $foreignKeyColumn = $schema->getForeignKey(); $model = $schema->getModel(); $tableName = $model->getTableName(); if ($parentCollection = $this->getParentCollection()) { $modelClassName = $schema->getModelClassName(); $ids = $parentCollection->ids(); $select = $model->table()->select()->where($tableName . '.' . $foreignKeyColumn . ' IN (' . implode(', ', $ids) . ')'); $rows = $select->all(); $pairs = ArrayUtils::column($rows, null, $foreignKeyColumn); foreach ($pairs as &$item) { $item = new $modelClassName($item); } foreach ($parentCollection as $model) { $id = $model->id(); if (isset($pairs[$id])) { $model->relationData[$name] = $pairs[$id]; } else { $model->relationData[$name] = null; } } $selfId = $this->id(); return isset($pairs[$selfId]) ? $pairs[$selfId] : null; } else { return $model->first($tableName . '.' . $foreignKeyColumn . ' = ' . $this->id()); } }
/** * @param string $name * @param string $columnKey * @return array */ public function column($name, $columnKey = null) { return ArrayUtils::column($this->toArray(), $name, $columnKey); }
/** * @return array */ public function listPending() { return ArrayUtils::except($this->listMigrations(), $this->listMigratedVersion()); }
/** * @param null $where * @param null $params * @param null $columns * @return Collection */ private function all($where = null, $params = null, $columns = null) { $select = $this->table()->select(); if ($where) { if (is_numeric($where)) { $select->where($this->getPrimaryKey() . ' = ' . $where); } elseif (is_array($where) && ArrayUtils::hasOnlyInts($where)) { $select->where($this->getPrimaryKey() . ' IN (' . implode(', ', $where) . ')'); } else { call_user_func_array([$select, 'where'], func_get_args()); } } if (!$columns) { $select->select($this->getDefaultSelectColumns()); } $collectionClassName = $this->collectionClassName; return new $collectionClassName($select, $this); }