Как получить красноречивое сопоставление отношений на динамических полях - PullRequest
0 голосов
/ 01 июля 2019

У меня есть объект laravel, где я хотел бы получить его отношения. Однако ключ, который я бы использовал для привязки отношения, может быть одним из двух.

Например, допустим, у меня есть вымышленная «винная упаковка», которая, по сути, представляет собой коробку из трех бутылок вина - три красных, три белых или три розы. «Упаковка» продается как один продукт, но бутылки с вином также можно продавать по отдельности.

Controller.php

$wine_pack = Pack::with('wine')->get();

Wine.php

class Pack
{
    public function wine()
    {
        return $this->belongsTo(Wine::class, 'wine_sku', 'sku');
    }
}

Этот код действительно работает. Но в реальном мире белое вино идентифицируется по его «sku». Красное вино и розовое вино идентифицируются по их ref_id.

Я пытаюсь найти способ поиска отдельного вина по его sku, и если ничего не найдено, посмотрите по его ref_id. Например:

class Pack
{
    public function wine()
    {
        $wine = $this->belongsTo(Wine::class, 'wine_sku', 'sku');

        if($wine->count() <= 0)
            $wine = $this->belongsTo(Wine::class, 'wine_ref_id', 'ref_id');

        return $wine;

    }
}

Возможно ли это?

...