Пример #1
0
 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);
 }
Пример #2
0
 /**
  * @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));
     }
 }
Пример #3
0
 /**
  * @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());
     }
 }
Пример #4
0
 /**
  * @param string $name
  * @param string $columnKey
  * @return array
  */
 public function column($name, $columnKey = null)
 {
     return ArrayUtils::column($this->toArray(), $name, $columnKey);
 }
Пример #5
0
 /**
  * @return array
  */
 public function listPending()
 {
     return ArrayUtils::except($this->listMigrations(), $this->listMigratedVersion());
 }
Пример #6
0
 /**
  * @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);
 }