Size: a a a

Laravel для начинающих

2020 August 19

SG

Sergey Gerasimov in Laravel для начинающих
Vladimir Yefremov
есть такая связь
    public function landfills($direction = 'asc')
   {
       return $this->hasMany(ReportTko\Zone\Landfill::class)
           ->orderBy('id', $direction);
   }

как мне увидеть/продебажить - какие тут Лара ключи использует?
toSql
источник

VY

Vladimir Yefremov in Laravel для начинающих
спасибо!

забываю про него :(
источник

SG

Sergey Gerasimov in Laravel для начинающих
Ratibor Korobin
Всем доброе утро!

Столкнулся со следующией ситуацией:
Мне нужно создать связь между моделями по принципу belongsToMany, однако, это должна быть связь один-к-одному, т.е. в связующей таблице должна быть только одна запись, связывающая одни и те же ключи.

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

Я нашёл решение в виде связи hasOneThrough, однако оно не устраивает по двум причинам:
- (основная) Хотелось бы использовать удобные функции как в belongsToMany (attach и sync)
- (дополнительная) С прописыванием ключей к hasOneThrough ещё та заморочка. Практически перебором подбирал.

Есть какое-то элегантное решение для данной задачи?
По идее, случай не уникальный
Попробуй посмотреть как реализовано в пакете https://github.com/staudenmeir/eloquent-has-many-deep
источник

RK

Ratibor Korobin in Laravel для начинающих
Хорошо, посмотрю, спасибо!
источник

VY

Vladimir Yefremov in Laravel для начинающих
помоги плз с запросом:
в таком виде - с ->withCount('landfills')
        return Zone::with(['report.region', 'landfills', 'vehicles', 'auto_park', 'checks', 'media', 'zoneTitle'])
           ->withCount('landfills')

не туда строит связь, т.к. на самом деле
существует связь
'report.landfills'

вот так - ошибка нет у Зоны связи 'report.landfills'
        return Zone::with(['report.region', 'landfills', 'vehicles', 'auto_park', 'checks', 'media', 'zoneTitle'])
           ->withCount('report.landfills')


вот так нормально находит связь, но не делает каунт
       return Zone::with(['report.region', 'landfills', 'vehicles', 'auto_park', 'checks', 'media', 'zoneTitle', 'report.landfills'])

как мне бы в последний вариант прицепить каунт для 'report.landfills' ?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Vladimir Yefremov
помоги плз с запросом:
в таком виде - с ->withCount('landfills')
        return Zone::with(['report.region', 'landfills', 'vehicles', 'auto_park', 'checks', 'media', 'zoneTitle'])
           ->withCount('landfills')

не туда строит связь, т.к. на самом деле
существует связь
'report.landfills'

вот так - ошибка нет у Зоны связи 'report.landfills'
        return Zone::with(['report.region', 'landfills', 'vehicles', 'auto_park', 'checks', 'media', 'zoneTitle'])
           ->withCount('report.landfills')


вот так нормально находит связь, но не делает каунт
       return Zone::with(['report.region', 'landfills', 'vehicles', 'auto_park', 'checks', 'media', 'zoneTitle', 'report.landfills'])

как мне бы в последний вариант прицепить каунт для 'report.landfills' ?
return Zone::with(['report.landfills'])->withCount('report.landfills')
источник

VY

Vladimir Yefremov in Laravel для начинающих
Sergey Gerasimov
return Zone::with(['report.landfills'])->withCount('report.landfills')
не...
Call to undefined method App\Models\ReportForms\ReportTko\Zone::report.landfills()
источник

SG

Sergey Gerasimov in Laravel для начинающих
Vladimir Yefremov
не...
Call to undefined method App\Models\ReportForms\ReportTko\Zone::report.landfills()
Тогда через лямду
источник

VY

Vladimir Yefremov in Laravel для начинающих
Sergey Gerasimov
Тогда через лямду
пробую
источник

V

Vladyslav in Laravel для начинающих
Vladimir Yefremov
пробую
return Zone::with(['report.region', 'landfills',  

у тебя ж вот тут еще вызывает "landfills" ?
источник

V

Vladyslav in Laravel для начинающих
это те же самые лэндфилсы которые и в withCount ?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Vladimir Yefremov
не...
Call to undefined method App\Models\ReportForms\ReportTko\Zone::report.landfills()
А если связь ОдинКоМногимЧерез?
источник

SG

Sergey Gerasimov in Laravel для начинающих
Есть такая?
источник

VY

Vladimir Yefremov in Laravel для начинающих
Sergey Gerasimov
Есть такая?
нет, такую не создавал
источник

SG

Sergey Gerasimov in Laravel для начинающих
Vladimir Yefremov
нет, такую не создавал
источник

VY

Vladimir Yefremov in Laravel для начинающих
пытался раньше в другом проекте, не справился :), сложна
источник

SG

Sergey Gerasimov in Laravel для начинающих
Vladimir Yefremov
пытался раньше в другом проекте, не справился :), сложна
Пора справиться
источник

VY

Vladimir Yefremov in Laravel для начинающих
Vladyslav
это те же самые лэндфилсы которые и в withCount ?
да
источник

SG

Sergey Gerasimov in Laravel для начинающих
И почему тогда они не подходят?
источник

VY

Vladimir Yefremov in Laravel для начинающих
Sergey Gerasimov
Тогда через лямду
подскажи, плз - куда ее тут воткнуть?
источник