1
resposta

Resultado de SQL dentro do item com $appends

Olá, na aula "Navegando entre recursos" do curso "Lumen: API Rest" o instrutor mostrou como adicionar um novo item no resultado que já estavamos recebendo da consulta no banco de dados:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

No meu caso, que é um pouco diferente do instrutor, eu preciso popular o meu item novo com dados de uma nova consulta do banco de dados;

LicensesController.php

<?php

namespace App\Http\Controllers;

use App\Models\License;

class LicencesController
{

    public function showLicense()
    {
        return License::query()
            ->join('plans', 'licenses.plan_id', '=', 'plans.id')
            ->where('licenses.client_id', 1)
            ->get(['plans.id', 'plan_name', 'storage', 'price','expires_at']);

    }
}

Licenses.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class License extends Model
{
    public $timestamps = false;
    protected $appends = ['licenses'];


    public function getLicensesAttribute($licenses): array
    {
        return [
            'total_licenses' => RESULTADO_INTEGER_DA_CONSULTA_NO_BANCO_AQUI,
            'licenses_available' => '123'
        ];
    }


}

Meus código para consultar está aqui:

 public function totalLicenses()
    {
        $totalLicenses = License::query()
            ->where('client_id', 1)
            ->get('licenses_quantity');

        return $totalLicenses;
    }

Porém ele me retorna uma collection, e não um inteiro, o que eu preciso é de uma forma de pegar somente o valor do campo 'licenses_quantity' como integer e saber como que eu passo ele na minha função getLicensesAttribute($licenses).

1 resposta

Oi Larissa,

Ao invés de retornar a collection inteira, retorna somente o valor que você deseja:

 public function totalLicenses()
    {
        $totalLicenses = License::query()
            ->where('client_id', 1)
            ->get('licenses_quantity');

        return $totalLicenses[0]['licenses_quantity'];
    }