Passed
Push — main ( d2dd60...7e41d8 )
by Sammy
10:45 queued 04:07
created

HasOne::extract()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 9
c 1
b 0
f 0
nc 4
nop 3
dl 0
loc 16
rs 9.6111
1
<?php
2
3
namespace HexMakina\TightORM;
4
5
use HexMakina\BlackBox\ORM\ModelInterface;
6
7
trait HasOne
8
{
9
10
  public static function extract(ModelInterface $extract_model, ModelInterface $from_model, $ignore_nullable = false): ?ModelInterface
11
  {
12
      $extraction_class = get_class($extract_model);
13
      $extraction_table = $extraction_class::table();
14
15
      foreach ($extraction_table->columns() as $column_name => $column) {
16
          $probe_name = $extraction_class::tableAlias() . '_' . $column_name;
17
18
          if (!is_null($probe_res = $from_model->get($probe_name))) {
19
              $extract_model->set($column_name, $probe_res);
20
          } elseif (!$column->isNullable() && $ignore_nullable === false) {
21
              return null;
22
          }
23
      }
24
25
      return $extract_model;
26
  }
27
}
28