Home > Net >  Get attribute in model - laravel eloquent
Get attribute in model - laravel eloquent

Time:09-28

In laravel i can getFirstNameAttribute in my products model and change the value but I'm create this column "priceArray" and i can not get attributes because The first letter in the second word is capital letters and model can not found this column.

public function getPriceArrayAttribute($value)
    {
        return 'test';
    }

Its not work and can not get "priceArray" column

This is my migration

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('title')->nullable();
            $table->string('price')->nullable();
            $table->string('priceArray')->nullable();
            $table->text('items')->nullable();
            $table->enum('status',['active','inactive','unavailable'])->default('inactive');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}

This is my product model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

/**
 * Class Products
 * @package App\Models
 * @property Variants Variants
 */
class Products extends Model
{
    use HasFactory;

    protected $guarded=[];
    protected $changePrice=0;

    public function Insert($data)
    {
        return self::create($data);
    }


    public function getPriceArrayAttribute($value)
    {
        return 'test';

    }

    public function getPriceAttribute($value)
    {

        return ceil($value);
    }


}


The getPriceAttribute is worked but getPriceArrayAttribute does not worked

CodePudding user response:

I think you are trying to modify the priceArray value after it is retrieved from the database, the way you did with ceil() on the price attribute. The only way this works is if you change the column name to price_array. This is by far the simplest fix.

Migration

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('title')->nullable();
    $table->string('price')->nullable();
    $table->string('price_array')->nullable();
    $table->text('items')->nullable();
    $table->enum('status',['active','inactive','unavailable'])->default('inactive');
    $table->timestamps();
});

Model

public function getPriceArrayAttribute($value)
{
    return 'test';
}

CodePudding user response:

You must follow Eloquent's rules: you use snake case for the attributes. The getPriceArrayAttribute accessor will automatically be called by Eloquent when you retrieve the value of the price_array attribute.

$table->string('price_array')->nullable();
  • Related