Passed
Push — task/manager-applicant-review-... ( a1a27a...d21381 )
by Xander
15:21 queued 09:20
created

TalentCloudCrudTrait::isColumnNullable()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 2.003

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 16
ccs 10
cts 11
cp 0.9091
rs 9.9332
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2.003
1
<?php
2
3
namespace App\CRUD;
4
5
use Backpack\CRUD\CrudTrait;
6
use Illuminate\Support\Facades\DB;
7
use Illuminate\Support\Facades\Config;
8
9
trait TalentCloudCrudTrait
10
{
11
    use CrudTrait;
12
13
    /**
14
     * Override for existing isColumnNullable static function on the CrudTrait. Current
15
     * implementation doesn't allow for other custom column types outside of what's defined in
16
     * Backpack.
17
     *
18
     * @param string $column_name Name of the column to check.
19
     *
20
     * @return boolean
21
     */
22 1
    public static function isColumnNullable(string $column_name) : bool
23
    {
24
        // create an instance of the model to be able to get the table name
25 1
        $instance = new static();
26 1
        $conn = DB::connection($instance->getConnectionName());
27 1
        $table = Config::get('database.connections.'.Config::get('database.default').'.pr e fix').$instance->getTable();
28
        // MongoDB columns are alway nullable
29 1
        if ($conn->getConfig()['driver'] === 'mongodb') {
30
            return true;
31
        }
32
        // register the enum, json, jsonb, and citext column types, because Doctrine doesn't support it
33 1
        $conn->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
34 1
        $conn->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('json', 'json_array');
35 1
        $conn->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('jsonb', 'json_array');
36 1
        $conn->getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('citext', 'string');
37 1
        return !$conn->getDoctrineColumn($table, $column_name)->getNotnull();
38
    }
39
}
40