princeoo7's avatar

How to directly get a flatten array for hasMany data from model?

I have a model where I am getting data in form of array with value as key and then the real data as value. how can i just get all values in the array like `[1,"abc",2,3,4"asd"].

ProductAttributeValue

public function values()
    {
        return $this->hasMany(ProductAttributeValue::class);
    }

ProductAttribute

public function attributes()
    {
        return $this->belongsToMany(ProductAttribute::class);
    }

OUTPUT I GET NOW:

"values": [
    {
        "value": "asd"
    },
    {
        "value": "sdf"
    },
    {
        "value": "dfgh"
    },
    {
        "value": "fgh"
    },
    {
        "value": "fgesrdth"
    },
    {
        "value": "xcvb"
    },
    {
        "value": "435"
    },
    {
        "value": "fg"
    },
    {
        "value": "fghj"
    },
    {
        "value": "cvn"
    },
    {
        "value": "fghj"
    }
]

what i want is

"values": [
    "asd",
    "sdf",
    "dfgh",
    "fgh",
    "fgesrdth",
    "xcvb",
    "435",
    "fg",
    "fghj",
    "cvn",
    "fghj"
]

======= UPDATED WITH MODEL CODE ============= Product Model

<?php

namespace App\Models;

use App\Support\DataViewer;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory, DataViewer;
    protected $guarded = [];

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $allowedFilters = [
        'id',
        'name',
        'description',
        'created_at',
        'updated_at',

        // nested 
        'products.attributes',
        'products.variants',

    ];

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $orderable = [
        'id',
        'name',
        'description',
        'created_at',
        'updated_at',

        // nested 
        'products.variants',
    ];

    protected $with = ['variants'];



    public function variants()
    {
        return $this->hasMany(ProductVariant::class);
    }
}

ProductVariant Model

<?php

namespace App\Models;

use App\Support\DataViewer;
use Database\Factories\ProductVariantFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ProductVariant extends Model
{
    use HasFactory, DataViewer;
    protected $with = ['attributes'];
    protected $hidden = ['pivot'];

    /**
     * Create a new factory instance for the model.
     *
     * @return \Illuminate\Database\Eloquent\Factories\Factory
     */
    protected static function newFactory()
    {
        return ProductVariantFactory::new();
    }

    public function products()
    {
        return $this->belongsToMany(Product::class);
    }

    public function attributes()
    {
        return $this->hasMany(ProductAttribute::class)->with(['values' => function ($query) {
            return $query->pluck('value');
        }]);
    }
}

ProductAttribute Model

<?php

namespace App\Models;

use app\Support\DataViewer;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ProductAttribute extends Model
{
    use HasFactory, DataViewer;
    protected $guarded = [];

    // protected $with = ['values'];
    protected $hidden = ['id', 'pivot', 'product_variant_id', 'created_at', 'updated_at'];

    public function variants()
    {
        return $this->belongsToMany(ProductVariant::class);
    }

    public function values()
    {
        return $this->hasMany(ProductAttributeValue::class);
    }
}

ProductAttributeValue Model

<?php

namespace App\Models;

use app\Support\DataViewer;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class ProductAttributeValue extends Model
{
    use HasFactory, DataViewer;
    protected $hidden = ['id', 'product_attribute_id', 'created_at', 'updated_at'];
    protected $guarded = [];

    public function attributes()
    {
        return $this->belongsToMany(ProductAttribute::class);
    }
}

+++++ EXAMPLE DATA +++++

{"collection":{"current_page":1,"data":[{"id":2,"name":"Prof. Lucile Gutmann V","description":"Ut voluptatibus dolores quo. Accusamus molestias aut mollitia provident magnam sequi nobis.","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","variants":[{"id":9,"product_id":2,"sku":"fac084ff-8762-352c-a6ef-567236558b74","qty":"34872","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"ingredients","name":"Ingredients","values":[{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"}]},{"code":"color","name":"Color","values":[{"value":"830"},{"value":"827"},{"value":"439"},{"value":"113"},{"value":"187"},{"value":"295"},{"value":"616"},{"value":"753"},{"value":"998"}]},{"code":"packaging","name":"Packaging","values":[{"value":"Packaging"}]},{"code":"size","name":"Size","values":[{"value":"943"},{"value":"51"},{"value":"157"},{"value":"253"},{"value":"740"},{"value":"222"},{"value":"785"},{"value":"719"},{"value":"582"},{"value":"757"},{"value":"917"},{"value":"867"},{"value":"114"},{"value":"816"},{"value":"720"}]},{"code":"quantity","name":"Quantity","values":[{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"}]}]},{"id":10,"product_id":2,"sku":"3c6f3ca2-565e-374a-b4e1-06f28bda4b3c","qty":"78404","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"smell","name":"Smell","values":[{"value":"692"},{"value":"316"},{"value":"250"},{"value":"506"},{"value":"854"},{"value":"513"},{"value":"539"},{"value":"669"},{"value":"695"},{"value":"540"},{"value":"68"}]},{"code":"design","name":"Design","values":[{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"}]},{"code":"price","name":"Price","values":[{"value":"156"},{"value":"323"},{"value":"484"},{"value":"247"},{"value":"261"},{"value":"75"},{"value":"140"},{"value":"591"},{"value":"172"},{"value":"750"},{"value":"318"},{"value":"436"},{"value":"374"}]},{"code":"packaging","name":"Packaging","values":[{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"}]},{"code":"weight","name":"Weight","values":[{"value":"396"},{"value":"391"},{"value":"856"},{"value":"752"},{"value":"983"},{"value":"924"},{"value":"139"},{"value":"503"},{"value":"339"},{"value":"402"},{"value":"473"},{"value":"844"},{"value":"341"},{"value":"929"},{"value":"865"}]},{"code":"color","name":"Color","values":[{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"}]},{"code":"size","name":"Size","values":[{"value":"303"},{"value":"657"},{"value":"809"},{"value":"748"},{"value":"406"},{"value":"627"},{"value":"978"},{"value":"308"},{"value":"230"}]},{"code":"ingredients","name":"Ingredients","values":[{"value":"Ingredients"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"946"},{"value":"94"},{"value":"765"}]},{"code":"reliability","name":"Reliability","values":[{"value":"Reliability"},{"value":"Reliability"},{"value":"Reliability"},{"value":"Reliability"},{"value":"Reliability"}]},{"code":"design","name":"Design","values":[{"value":"576"},{"value":"454"}]},{"code":"content","name":"Content","values":[{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"}]}]},{"id":11,"product_id":2,"sku":"0d1c0d89-ff5f-364a-a744-cb0319a3d451","qty":"27965","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"safety","name":"Safety","values":[{"value":"612"},{"value":"886"},{"value":"14"},{"value":"942"},{"value":"445"},{"value":"488"},{"value":"637"},{"value":"213"},{"value":"97"},{"value":"350"},{"value":"562"},{"value":"807"},{"value":"552"},{"value":"613"},{"value":"319"},{"value":"791"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"}]},{"code":"smell","name":"Smell","values":[{"value":"587"},{"value":"806"},{"value":"418"},{"value":"593"},{"value":"971"},{"value":"579"},{"value":"109"}]}]},{"id":12,"product_id":2,"sku":"4a59a7d3-3c92-3fa2-8977-154d3ae9f814","qty":"33454","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"color","name":"Color","values":[{"value":"Color"},{"value":"Color"},{"value":"Color"}]},{"code":"price","name":"Price","values":[{"value":"271"},{"value":"827"},{"value":"723"},{"value":"829"},{"value":"313"},{"value":"939"},{"value":"893"},{"value":"19"},{"value":"879"},{"value":"412"},{"value":"91"},{"value":"848"},{"value":"647"}]},{"code":"packaging","name":"Packaging","values":[{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"}]},{"code":"weight","name":"Weight","values":[{"value":"525"},{"value":"206"}]},{"code":"ingredients","name":"Ingredients","values":[{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"}]},{"code":"taste","name":"Taste","values":[{"value":"690"},{"value":"467"},{"value":"282"},{"value":"247"},{"value":"421"},{"value":"198"},{"value":"337"},{"value":"867"},{"value":"886"},{"value":"25"},{"value":"377"},{"value":"266"},{"value":"413"},{"value":"649"},{"value":"623"},{"value":"414"}]},{"code":"ingredients","name":"Ingredients","values":[{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"}]},{"code":"safety","name":"Safety","values":[{"value":"339"},{"value":"233"},{"value":"99"},{"value":"385"},{"value":"449"},{"value":"243"},{"value":"576"}]}]},{"id":13,"product_id":2,"sku":"aed89f83-d9dc-3695-976e-20435db62ecb","qty":"41794","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"packaging","name":"Packaging","values":[{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"},{"value":"Packaging"}]},{"code":"safety","name":"Safety","values":[{"value":"916"},{"value":"511"},{"value":"348"},{"value":"634"},{"value":"763"},{"value":"32"},{"value":"722"},{"value":"835"}]},{"code":"content","name":"Content","values":[{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"},{"value":"Content"}]},{"code":"price","name":"Price","values":[{"value":"695"},{"value":"513"},{"value":"513"},{"value":"242"}]},{"code":"smell","name":"Smell","values":[{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"}]},{"code":"design","name":"Design","values":[{"value":"843"},{"value":"653"},{"value":"218"},{"value":"168"},{"value":"100"},{"value":"545"},{"value":"200"},{"value":"113"},{"value":"820"},{"value":"750"}]},{"code":"size","name":"Size","values":[{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"}]},{"code":"quantity","name":"Quantity","values":[{"value":"936"},{"value":"889"},{"value":"1000"},{"value":"300"}]},{"code":"feel","name":"Feel","values":[{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"}]},{"code":"color","name":"Color","values":[{"value":"254"},{"value":"152"},{"value":"713"},{"value":"141"},{"value":"463"},{"value":"619"},{"value":"271"},{"value":"543"},{"value":"585"},{"value":"262"},{"value":"387"}]}]},{"id":14,"product_id":2,"sku":"bf215eb1-64cf-3ecb-9360-50604f72540f","qty":"5187","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"smell","name":"Smell","values":[{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"}]},{"code":"ingredients","name":"Ingredients","values":[{"value":"645"},{"value":"867"},{"value":"18"},{"value":"241"},{"value":"975"},{"value":"413"}]},{"code":"safety","name":"Safety","values":[{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"253"},{"value":"844"},{"value":"152"},{"value":"361"},{"value":"42"},{"value":"60"},{"value":"207"},{"value":"6"},{"value":"956"},{"value":"833"},{"value":"542"},{"value":"975"}]},{"code":"ingredients","name":"Ingredients","values":[{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"},{"value":"Ingredients"}]},{"code":"safety","name":"Safety","values":[{"value":"392"},{"value":"753"},{"value":"703"}]},{"code":"feel","name":"Feel","values":[{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"}]},{"code":"design","name":"Design","values":[{"value":"1000"},{"value":"169"},{"value":"456"},{"value":"798"},{"value":"880"},{"value":"830"},{"value":"27"},{"value":"473"},{"value":"719"}]},{"code":"quantity","name":"Quantity","values":[{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"},{"value":"Quantity"}]},{"code":"content","name":"Content","values":[{"value":"541"},{"value":"703"},{"value":"712"},{"value":"511"},{"value":"412"},{"value":"822"},{"value":"740"},{"value":"7"},{"value":"524"},{"value":"62"},{"value":"991"},{"value":"630"},{"value":"323"},{"value":"701"}]},{"code":"design","name":"Design","values":[{"value":"Design"},{"value":"Design"},{"value":"Design"}]},{"code":"quantity","name":"Quantity","values":[{"value":"712"},{"value":"834"},{"value":"335"},{"value":"457"}]}]},{"id":15,"product_id":2,"sku":"ff5f92e1-b4db-3744-92a5-3907c46b1f28","qty":"61347","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"feel","name":"Feel","values":[{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"}]},{"code":"ingredients","name":"Ingredients","values":[{"value":"475"},{"value":"666"},{"value":"600"},{"value":"155"},{"value":"988"}]},{"code":"feel","name":"Feel","values":[{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"}]},{"code":"safety","name":"Safety","values":[{"value":"167"},{"value":"537"},{"value":"721"},{"value":"670"},{"value":"499"},{"value":"415"}]},{"code":"design","name":"Design","values":[{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"}]},{"code":"weight","name":"Weight","values":[{"value":"333"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"Marketing claims"}]},{"code":"packaging","name":"Packaging","values":[{"value":"833"},{"value":"785"},{"value":"614"},{"value":"449"},{"value":"657"},{"value":"44"},{"value":"294"},{"value":"543"},{"value":"495"},{"value":"878"},{"value":"124"},{"value":"259"},{"value":"841"}]}]},{"id":16,"product_id":2,"sku":"ee7661b8-4963-3dc8-b13e-d13747d487ae","qty":"12612","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"color","name":"Color","values":[{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"}]},{"code":"feel","name":"Feel","values":[{"value":"890"},{"value":"817"},{"value":"893"},{"value":"17"},{"value":"793"},{"value":"34"},{"value":"986"},{"value":"648"},{"value":"464"},{"value":"257"},{"value":"234"},{"value":"198"},{"value":"820"},{"value":"566"}]},{"code":"feel","name":"Feel","values":[{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"}]},{"code":"reliability","name":"Reliability","values":[{"value":"237"},{"value":"410"},{"value":"985"},{"value":"330"},{"value":"109"},{"value":"213"},{"value":"364"},{"value":"42"},{"value":"573"},{"value":"263"},{"value":"203"},{"value":"936"},{"value":"690"}]},{"code":"taste","name":"Taste","values":[{"value":"Taste"},{"value":"Taste"},{"value":"Taste"}]},{"code":"shell_life","name":"Shell Life","values":[{"value":"675"},{"value":"679"},{"value":"170"},{"value":"101"},{"value":"740"},{"value":"860"},{"value":"551"},{"value":"62"},{"value":"252"},{"value":"328"},{"value":"480"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"}]},{"code":"weight","name":"Weight","values":[{"value":"111"},{"value":"367"},{"value":"323"},{"value":"798"},{"value":"49"},{"value":"812"},{"value":"71"},{"value":"872"},{"value":"153"},{"value":"60"},{"value":"368"},{"value":"455"},{"value":"110"},{"value":"108"},{"value":"924"},{"value":"370"}]}]}]},{"id":1,"name":"Fae Greenfelder","description":"Expedita facere esse nihil et vitae laudantium corporis. Modi rem id et. Ducimus iusto ullam nesciunt ut. Eum ducimus ab quos voluptatibus ullam.","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","variants":[{"id":1,"product_id":1,"sku":"6a553b02-d769-32ca-9778-5b1b4b9431f1","qty":"68512","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"746"},{"value":"488"},{"value":"831"},{"value":"280"},{"value":"84"}]},{"code":"design","name":"Design","values":[{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"}]},{"code":"packaging","name":"Packaging","values":[{"value":"269"},{"value":"304"},{"value":"167"},{"value":"918"},{"value":"830"},{"value":"898"},{"value":"332"},{"value":"135"}]},{"code":"price","name":"Price","values":[{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"}]},{"code":"smell","name":"Smell","values":[{"value":"142"}]},{"code":"smell","name":"Smell","values":[{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"}]},{"code":"design","name":"Design","values":[{"value":"116"},{"value":"602"},{"value":"188"},{"value":"149"},{"value":"410"},{"value":"666"}]}]},{"id":2,"product_id":1,"sku":"974a14cb-4bfd-37b8-84ad-94713003d7d3","qty":"13995","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"safety","name":"Safety","values":[{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"},{"value":"Safety"}]},{"code":"safety","name":"Safety","values":[{"value":"120"},{"value":"400"},{"value":"224"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"},{"value":"Marketing claims"}]},{"code":"size","name":"Size","values":[{"value":"204"},{"value":"566"},{"value":"286"},{"value":"415"},{"value":"986"},{"value":"4"},{"value":"104"},{"value":"1"},{"value":"920"},{"value":"473"},{"value":"468"},{"value":"740"},{"value":"800"},{"value":"925"}]},{"code":"color","name":"Color","values":[{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"},{"value":"Color"}]},{"code":"price","name":"Price","values":[{"value":"376"},{"value":"529"},{"value":"596"},{"value":"442"},{"value":"65"},{"value":"258"},{"value":"683"},{"value":"923"},{"value":"96"},{"value":"56"},{"value":"544"},{"value":"55"},{"value":"598"},{"value":"648"},{"value":"656"},{"value":"559"}]},{"code":"smell","name":"Smell","values":[{"value":"Smell"},{"value":"Smell"},{"value":"Smell"}]},{"code":"quantity","name":"Quantity","values":[{"value":"729"},{"value":"825"},{"value":"800"},{"value":"198"},{"value":"511"},{"value":"507"},{"value":"390"},{"value":"411"},{"value":"174"},{"value":"160"},{"value":"73"},{"value":"653"},{"value":"777"},{"value":"783"},{"value":"475"},{"value":"958"}]}]},{"id":3,"product_id":1,"sku":"1c7ca422-41d5-35e7-aa80-8485acc463ae","qty":"21351","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"smell","name":"Smell","values":[{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"},{"value":"Smell"}]}]},{"id":4,"product_id":1,"sku":"961aba8f-33a4-397c-bb8a-5e8698a512f9","qty":"24693","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"reliability","name":"Reliability","values":[{"value":"197"},{"value":"688"},{"value":"235"},{"value":"719"},{"value":"320"},{"value":"911"},{"value":"738"},{"value":"786"},{"value":"581"}]},{"code":"weight","name":"Weight","values":[{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"}]},{"code":"content","name":"Content","values":[{"value":"110"},{"value":"364"},{"value":"746"},{"value":"397"},{"value":"5"},{"value":"915"},{"value":"112"},{"value":"269"},{"value":"450"},{"value":"485"},{"value":"292"},{"value":"726"}]},{"code":"size","name":"Size","values":[{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"},{"value":"Size"}]},{"code":"weight","name":"Weight","values":[{"value":"494"},{"value":"493"},{"value":"174"},{"value":"74"},{"value":"331"},{"value":"370"},{"value":"597"},{"value":"186"},{"value":"163"},{"value":"455"}]}]},{"id":5,"product_id":1,"sku":"e460d22b-c238-30e4-978b-08ea4bb6eff1","qty":"2756","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"Marketing claims"},{"value":"Marketing claims"}]},{"code":"color","name":"Color","values":[{"value":"906"},{"value":"186"},{"value":"715"},{"value":"698"},{"value":"497"},{"value":"107"},{"value":"676"},{"value":"594"},{"value":"294"},{"value":"176"},{"value":"931"},{"value":"389"},{"value":"853"},{"value":"621"}]},{"code":"taste","name":"Taste","values":[{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"}]},{"code":"size","name":"Size","values":[{"value":"741"},{"value":"866"},{"value":"131"},{"value":"615"},{"value":"998"},{"value":"994"},{"value":"470"},{"value":"772"},{"value":"206"}]},{"code":"taste","name":"Taste","values":[{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"},{"value":"Taste"}]}]},{"id":6,"product_id":1,"sku":"f5397df2-ba3d-382d-a74c-67539d7a4f42","qty":"44711","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"color","name":"Color","values":[{"value":"860"},{"value":"247"},{"value":"57"}]},{"code":"price","name":"Price","values":[{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"},{"value":"Price"}]},{"code":"taste","name":"Taste","values":[{"value":"536"},{"value":"738"},{"value":"751"},{"value":"626"},{"value":"43"},{"value":"213"},{"value":"486"},{"value":"594"},{"value":"429"},{"value":"904"},{"value":"186"},{"value":"648"}]},{"code":"weight","name":"Weight","values":[{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"},{"value":"Weight"}]}]},{"id":7,"product_id":1,"sku":"9d0ba0f0-7e63-3495-8186-353249cb7432","qty":"43537","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"design","name":"Design","values":[{"value":"735"},{"value":"118"},{"value":"754"},{"value":"132"},{"value":"73"},{"value":"88"},{"value":"832"},{"value":"227"}]},{"code":"feel","name":"Feel","values":[{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"},{"value":"Feel"}]},{"code":"price","name":"Price","values":[{"value":"445"},{"value":"800"},{"value":"172"},{"value":"813"},{"value":"770"},{"value":"169"},{"value":"184"},{"value":"921"},{"value":"154"},{"value":"91"}]},{"code":"design","name":"Design","values":[{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"},{"value":"Design"}]},{"code":"price","name":"Price","values":[{"value":"841"},{"value":"405"},{"value":"518"},{"value":"176"}]},{"code":"color","name":"Color","values":[{"value":"Color"}]},{"code":"taste","name":"Taste","values":[{"value":"592"},{"value":"684"},{"value":"425"},{"value":"452"}]},{"code":"size","name":"Size","values":[{"value":"Size"},{"value":"Size"},{"value":"Size"}]},{"code":"marketing_claims","name":"Marketing claims","values":[{"value":"359"},{"value":"2"},{"value":"901"},{"value":"443"},{"value":"621"},{"value":"152"},{"value":"611"},{"value":"183"},{"value":"192"},{"value":"456"},{"value":"358"}]}]},{"id":8,"product_id":1,"sku":"54d70447-e4de-31f6-8b8c-274839b0a04f","qty":"55197","created_at":"2022-10-16T20:24:45.000000Z","updated_at":"2022-10-16T20:24:45.000000Z","attributes":[{"code":"taste","name":"Taste","values":[{"value":"Taste"},{"value":"Taste"}]},{"code":"design","name":"Design","values":[{"value":"385"},{"value":"297"},{"value":"602"},{"value":"26"},{"value":"536"},{"value":"297"},{"value":"128"},{"value":"22"}]},{"code":"shell_life","name":"Shell Life","values":[{"value":"Shell Life"},{"value":"Shell Life"},{"value":"Shell Life"}]},{"code":"taste","name":"Taste","values":[{"value":"617"},{"value":"256"},{"value":"130"},{"value":"783"}]}]}]}],"first_page_url":"http:\/\/ims.test\/api\/v1\/products?page=1","from":1,"last_page":5,"last_page_url":"http:\/\/ims.test\/api\/v1\/products?page=5","links":[{"url":null,"label":"&laquo; Previous","active":false},{"url":"http:\/\/ims.test\/api\/v1\/products?page=1","label":"1","active":true},{"url":"http:\/\/ims.test\/api\/v1\/products?page=2","label":"2","active":false},{"url":"http:\/\/ims.test\/api\/v1\/products?page=3","label":"3","active":false},{"url":"http:\/\/ims.test\/api\/v1\/products?page=4","label":"4","active":false},{"url":"http:\/\/ims.test\/api\/v1\/products?page=5","label":"5","active":false},{"url":"http:\/\/ims.test\/api\/v1\/products?page=2","label":"Next &raquo;","active":false}],"next_page_url":"http:\/\/ims.test\/api\/v1\/products?page=2","path":"http:\/\/ims.test\/api\/v1\/products","per_page":2,"prev_page_url":null,"to":2,"total":10}}
0 likes
15 replies
rodrigo.pedra's avatar

Show the code you are using to fetch the data from your model, not just the relation definition.

From the few info you provide now, I would try this:

Product::query()
    ->with(['attributes.values'])
    ->get()
    ->pluck('attributes')
    ->flatMap(fn ($values) => $values->pluck('values'))
    ->flatMap(fn ($values) => $values->pluck('value'));
tykus's avatar

If that array above is (for example) in a variable $values:

collect($values['values'])->pluck('value')
princeoo7's avatar

@tykus got "Method Illuminate\\Support\\Collection::addEagerConstraints does not exist." when trying to do the below

 public function values()
    {
        return collect($this->hasMany(ProductAttributeValue::class))->pluck('value');
    }
princeoo7's avatar

I am using $with in model

class ProductAttribute extends Model
{
    use HasFactory, DataViewer;
    protected $guarded = [];

    protected $with = ['values'];
    protected $hidden = ['id', 'pivot', 'product_variant_id', 'created_at', 'updated_at'];

    public function variants()
    {
        return $this->belongsToMany(ProductVariant::class);
    }

    public function values()
    {
        return $this->hasMany(ProductAttributeValue::class);
    }
}

and in controller

public function index()
    {
        $product = Product::advanceFilter();
        return response()->json(
            [
                // 'collection' => Product::advanceFilter(),
                'collection' => $product,
            ]
        );
    }

advanceFilter() is nothing but just a DB trail so nothingn special there.

rodrigo.pedra's avatar

@princeoo7 can you try this:

$product = Product::advanceFilter()->transform(function (Product $product) {
    $values = $product->values->pluck('value');
    $product->setRelation('values', $values);

    return $product;
});
princeoo7's avatar

@rodrigo.pedra this work at some level but the real issue is that variables, attributes and values are in form of array. below worked for my first record in a way:

$product = Product::advanceFilter()->transform(function (Product $product) {
            $values = $product->variants[0]->attributes[0]->values->pluck('value');
            $product->variants[0]->attributes[0]->setRelation('values', $values);

            return $product;
        });
rodrigo.pedra's avatar

@princeoo7

$products = Product::query()->transform(function (Product $product) {
    $product->variants->each(function (Variant $variant) {
        $variant->attributes->each(function (Attribute $attribute) {
            $values = $attribute->values->pluck('value');
            $attribute->setRelation('values', $values);
        });
    });

    return $product;
});
princeoo7's avatar

@rodrigo.pedra the code you gave is not working. now i was trying to do something in the model itself.

ProductVariant Model:

public function attributes()
    {
        return $this->hasMany(ProductAttribute::class)->with(['values' => function ($query) {
            return $query->pluck('value');
        }]);
    }

this is not working but also not given error! I wonder why pluck is not working :/

and if I do select

public function attributes()
    {
        return $this->hasMany(ProductAttribute::class)->with(['values' => function ($query) {
            return $query->select('value');
        }]);
    }

it gives empty values : [] array...

rodrigo.pedra's avatar

@princeoo7

It is very hard to try to figure out what you want/need when we ask for info you don't provide.

On my very first message I asked you to show the code you were using to fetch the data. And said the sample I was providing was based on the few info provided.

Juts saying "not working" is not very helpful.

Please share all the related model full class definition , all their correspondent migrations, and the code where you query the data, so it is easier to help you.

princeoo7's avatar

@rodrigo.pedra update first post with Models and current output the only thing I need are values section under attribuites as below format:

"values": [
    "asd",
    "sdf",
    "dfgh",
    "fgh",
    "fgesrdth",
    "xcvb",
    "435",
    "fg",
    "fghj",
    "cvn",
    "fghj"
]
rodrigo.pedra's avatar
Level 56

If you are not using API Resources, add this to your ProductAttribute model:

public function toArray()
{
    $attributes = parent::toArray();

    if (\is_array($attributes['values'] ?? null)) {
        $attributes['values'] = Arr::pluck($attributes['values'], 'value');
    }

    return $attributes;
}

This also might work with API Resources, if you don't have a dedicated API Resource to ProductAttributeValue. If you do, please share how you are serializing your ProductAttribute models (note this is the parent model).

Also, the inverse relation of HasMany is BelongsTo, and not BelongsToMany.

  • BelongsToMany requires a pivot table between two models
  • BelongsTo requires that the child model has a foreign key field referencing a record in the parent model

From my understanding after seeing your models' code, all your relations seems to be one-to-many relations. If so, I would change all ->belongsToMany() calls to just ->belongsTo().

Reference: https://laravel.com/docs/9.x/eloquent-relationships#one-to-many-inverse

Consider reading these two blog posts from Laracasts' user @tray2

2 likes

Please or to participate in this conversation.