Laravel доступ к свойству модели в методе отношений - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть метод отношения для модели, которая имеет условие, основанное на свойстве самой модели.

// ProductController.php

    public function show($id, Request $request) {
      $product = Product::find($id);

      if ($request->exists('optionValues') {
         $product->load('optionValues');
      }
    }




// Product.php

    public function optionValues()
    {

/// here $this->stock_status_id is null. actually all attributes array is empty.

        if ($this->stock_status_id == Stock::CUSTOM_ORDER) {
            return $this->hasMany(ProductOptionValue::class, 'product_id', 'product_id')
                ->where('status', 1);
        }

        return $this->hasMany(ProductOptionValue::class, 'product_id', 'product_id')
            ->where('price', '>', 0)
            ->where('quantity', '>', '0')
            ->where('status', 1);

    }

но кажется, что когда Laravel загружает отношение, все свойства равны нулю. и $this->stock_status_id для текущей модели - ноль, и я не могу проверить условие.

Есть ли способ обойти эту проблему?

1 Ответ

0 голосов
/ 29 апреля 2020

После 2 часов отладки я обнаружил, что Laravel имеет другой способ загрузки отношений при использовании метода $model->load('relationName'), чем вызов его через $model->relationName

При использовании метода ->load('relationName') экземпляр модели имеет пока нет никаких атрибутов, даже если все атрибуты были загружены правильно перед вызовом $model->load().

Но при использовании $model->relationName в экземпляре модели у экземпляра есть все атрибуты, присутствующие при попытке загрузить отношение.

Итак, я изменил эту строку кода

$product->load('optionValues');

на это:

$product->optionValues;

И условие проверка методом optionValues(), работает как положено.

...