Красноречиво, как обновить значение дочерней таблицы, пока значение родительской таблицы не изменилось - PullRequest
0 голосов
/ 28 апреля 2020

мои отношения модели могут обновлять дочернее значение при изменении значения родительской таблицы. Проблема в том, что $model->save() не будет обновлять дочернюю таблицу, если в родительской таблице нет изменений.

Отношение модели продукта (родитель)

public function branch()
    {
        return $this->hasOne('BranchProduct')->where('branch_product.id', 'id');
    }

Отношение модели BranchProduct (дочерний элемент)

public function product()
    {
        return $this->hasOne('Product', 'id', 'product_id');
    }

Пример кода

$instance = Product::findOrFail(1);
$instance->fill('code, price');
$instance->save();

Предполагается, что у дочерней таблицы есть столбец stock, и при обновлении родительской таблицы code или price значение дочерней таблицы будет stock. Однако, когда дочерняя таблица stock значение не будет обновляться, если родительское значение не изменится.

1 Ответ

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

Вы можете использовать события для этой цели (https://laravel.com/docs/7.x/eloquent#events -using-closures )

В вашей Product модели вы можете отслеживать обновленное событие и соответственно изменять свою дочернюю модель. .

    protected static function booted()
    {
        static::updated(function ($product) {
            $product->branch->update([...]);
        });
    }
...