Eloquent, PostgreSQL: сделать четкий запрос, который использует «где в» в соединенных таблицах и вернуть одно из соответствующих значений в любой таблице - PullRequest
0 голосов
/ 28 октября 2019

У меня есть две таблицы. Табличный продукт имеет столбец sku и имеет связь с таблицей Skus, таблица sku также имеет столбец sku_secundario, представляющий его sku. Я хочу отсканировать продукты и таблицу Skus для повторных значений.

Продукты и Skus, один продукт может иметь много Skus. Я хочу найти в этих таблицах повторяющиеся значения.

product        skus
sku    ---->    sku           //relationship
               sku_secundario

Я буду сканировать столбец sku продуктов и столбец sku_secundario в skus.

Я написал следующий код, но он не интуитивно понятен. У меня много строк кода.

//lets say I want to find those skus
$skus = ["001", "002", "004490"];

//I use wherein on both the product and skus table
$product = Product::where('foot', 'foot')->whereIn('sku', $skus)->
orWhereHas('skus', function ($query) use ($skus) {
    $query->whereIn('sku_secundario', $skus);
})->first();

//if a product is found there are repeated values
//but which one? I have to make all the processing bellow
if ($product !== null) {
    $sku = "";
    //I check if it is on the product
    if (in_array($product->sku, $skus)) {
        $sku = $product->sku;
    } else {
        //otherwise I scan the many side of the relationship
        foreach ($product->skus as $sku_secundario) {
            if (in_array($sku_secundario->sku_secundario, $skus)) {
                $sku = $sku_secundario->sku_secundario;
            }
        }
    }
}

В конце я могу показать пользователю одно из повторяющихся значений, чтобы он мог исправить ввод. Я хотел бы сделать этот код более интуитивно понятным и, возможно, меньше строк. Это может быть необработанный запрос, но мне нужен четкий код, поэтому было бы сложно включить массив, чтобы проверить, является ли необработанный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...