Search code examples
phpeloquentlaravel-8laravel-7laravel-6

Convert String to integer on Laravel relationship object


I have a collection of arrays that consists of qty as string what I want is to remove a $ symbol and make the string to integer

"collection": [
        {
            "id": 983,
            "controlNumber": "4498818",
            "ItemNumber": "PS2W12077",
            "shipment": {
                "id": 27,
                "Item": "PS2W12077",
                "ColorCode": "GRPFR",
                "qty": "$1,638"
            }
        },
        {
            "id": 982,
            "controlNumber": "4498818",
            "ItemNumber": "PS2W12077",
            "shipment": {
                "id": 27,
                "Item": "PS2W12077",
                "ColorCode": "GRPFR",
                "qty": "$1,638"
            }
        },
        {
            "id": 981,
            "controlNumber": "4498818",
            "ItemNumber": "PS2W12077",
            "shipment": {
                "id": 27,
                "Item": "PS2W12077",
                "ColorCode": "GRPFR",
                "qty": "$1,638"
            }
        },
        {
            "id": 980,
            "controlNumber": "4498818",
            "ItemNumber": "PS2W12077",
            "shipment": {
                "id": 27,
                "Item": "PS2W12077",
                "ColorCode": "GRPFR",
                "qty": "$1,638"
            }
        }
]

the way I get did relationship on the model as follows

    public function Openorder()
    {
        $object = $this->hasOneThrough(OpenorderImportTemp::class, 'ItemNumber',  'Item');
        return $object;
    }

and then fetching on the controller is below

$openorder_data = OpenorderImportTemp::
        select('id', 'controlNumber', 'ItemNumber', )
            ->with('shipment:id,Item,ColorCode,qty')
            // ->groupBy('controlNumber')
            ->orderby('id', 'desc')
            ->where('ControlNumber', '!=', '0')
            ->get();

any possibilities to change the string to integer as I wanted. what I have tried is below

$openorder_data = OpenorderImportTemp::
        select('id', 'controlNumber', 'ItemNumber', DB::raw("SUM(shipment.qty) as qtysum") )
            ->with('shipment:id,Item,ColorCode,qty')
            // ->groupBy('controlNumber')
            ->orderby('id', 'desc')
            ->where('ControlNumber', '!=', '0')
            ->get();

Solution

  • protected $casts = [
            'qty' => 'integer',
        ];
    

    on model solve my issue. which changes the string to integer