DPlachkov
5 months ago

Nested relationship first rows

Posted 5 months ago by DPlachkov

Hello guys, I have an Eloquent problem that i can't seem to solve.

I'm trying to get the first rows only of my nested relationship product.defaultTariffs.matrix

I have 3 models - Product - defaultTariffs - Matrix.

A product can have 2 defaultTariffs.

defaultTariffs can have multiple values in the Matrix table.

Matrix table has lets say a hundred rows for a given tariff_id.

Matrix table has tariff_id, country_id, kilogram, value

What im tryng to do is

$products = Product::with(['defaultTariffs.matrix' => function($query) use ($weight) {
                $query->where([
                    ['country_id', $_POST['country_id']],
                    ['kilogram', '>=', $weight],
                ])->orderBy('kilogram', 'asc')->limit(1);
        }])->get();

The problem is that if i do that the query is built like this

select * from `tariff_matrix` where `tariff_matrix`.`tariff_id` in (1, 2) and (`country_id` = ? and `kilogram` >= ?) order by `kilogram` asc limit 1

And this returns only a single row for a single. If i remove the

->limit(1)

I get all the hundred rows for each defaultTariff

The question is - is there a way for me to eager load only the first row of the nested relationship (the matrix table)

Please sign in or create an account to participate in this conversation.