169 похожих чатов

Подскажите, есть ли какой-то легкий способ, получить hasOneThrough через 2

таблицы?
Например, предположим, что в примере из доки есть еще сверху таблица с фирмами(компаниями) 'companies', которая выглядит так:
companies:
id - integer
name - string

а в таблице механиков дополнена связью с фирмами
mechanics:
id - integer
name - string
company_id - integer

Есть ли способ сделать в Owner доступ к Компании типа так:
public function company(): HasOneThrough
{
return $this->hasOneThrough(Company::class, [Car::class, Mechanic::class]);
}

Видел в сети вроде какой-то пакет есть для этого, но не охота его ставить пока что. Может есть какие-то удобные штатные средства, не описанные в доке?
🤔

28 ответов

111 просмотров

попробуй типа public function company(): BelongsTo { return $this->car->mechanic->company(); } при условии что все связи описаны

только пакетом

Vladyslav
такое не заработает)

у меня работает, просто через 1 а не через 2

Serhii Dorn
у меня работает, просто через 1 а не через 2

ну не знаю, как то оно страшно выглядит

DevilSAM- Автор вопроса
Serhii Dorn
у меня работает, просто через 1 а не через 2

у меня тоже так работает через 2 связи. Не совсем релэйшен, конечно, но мне пойдет 😅 return Company::find($owner->car?->mechanic?->company_id)

DevilSAM- Автор вопроса
Vladyslav
фуфуфу

да мне надо это один раз в одном месте вывести )) не, это не внутри модели. Это уже по коду, где выводить надо

DevilSAM- Автор вопроса

это надо company() иметь внутри Owner. А что я там могу предложить?

DevilSAM
это надо company() иметь внутри Owner. А что я там...

public function company(): BelongsTo { return $this->car->mechanic->company(); }

DevilSAM- Автор вопроса
Serhii Dorn
public function company(): BelongsTo { ...

кстати, работает! ⚡️

Serhii Dorn
public function company(): BelongsTo { ...

Плохая реализация. Здесь нужно оставить релейшен в car, далее в модели car релейшен на механика, а в модели механика - на компанию. Снаружи используется жадная загрузка: with('car.mechanic.company') И, в том числе, избавляемся от проблемы N+1 в запросах.

DevilSAM- Автор вопроса
Andrey Helldar
Плохая реализация. Здесь нужно оставить релейшен в...

а разве with() не вернем нам билдер вместо релейшена?

DevilSAM
а разве with() не вернем нам билдер вместо релейше...

Сам метод возвращает билдер, а вот результат запроса будет содержать загруженные релейшены

DevilSAM- Автор вопроса
Andrey Helldar
Сам метод возвращает билдер, а вот результат запро...

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

DevilSAM
а... предлагается не писать релейшен для модели ow...

Жадная загрузка загружает релейшены. Не писать их невозможно

DevilSAM- Автор вопроса
Andrey Helldar
Жадная загрузка загружает релейшены. Не писать их ...

я имею ввиду конкретный релейшен company для модели owner. все остальные релейшены, конечно, остаются

DevilSAM- Автор вопроса
Andrey Helldar
Жадная загрузка загружает релейшены. Не писать их ...

то есть return Owner::with('car.machanic.company')->find($owner->id)?->car?->machanic?->company лучше чем return Company::find($owner->car?->mechanic?->company_id)

DevilSAM
то есть return Owner::with('car.machanic.company')...

а зачем делать Owner::find('$owner->id') ?)

DevilSAM
то есть return Owner::with('car.machanic.company')...

Зачем грузить овнера, если уже есть его модель? $owner->car->mechanic->company

DevilSAM- Автор вопроса
Andrey Helldar
Зачем грузить овнера, если уже есть его модель? $...

так... я не успеваю )) чем вот это лучше того, что было изначально?

DevilSAM- Автор вопроса
DevilSAM
так... я не успеваю )) чем вот это лучше того, чт...

ленивая загрузка нужна при массовой загрузке записей, ->get()

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта