Верны ли эти красноречивые определения отношений?

У меня есть модель оплаты, которая принадлежит модели FinancialGoal, которая, в свою очередь, принадлежит модели пользователя. У меня определены следующие методы отношений:

Модель оплаты:

public function financialGoal()
{
    return $this->belongsTo(FinancialGoal::class);
}

public function user()
{   //not sure this is correct
    return $this->hasOneThrough(User::class, FinancialGoal::class);
}

Модель пользователя:

public function financialGoals()
{
   return $this->hasMany(FinancialGoal::class);
}

public function payments()
{
   return $this->hasManyThrough(Payment::class, FinancialGoal::class);
}

Модель финансовой цели:

 public function user()
 {
    return $this->belongsTo(User::class);
 }

public function payments()
{
   return $this->hasMany(Payment::class);
}

Вопрос в том, как определить обратный метод оплаты в модели пользователя, в модели оплаты. В какой-то момент я использовал одно из этих двух определений модели оплаты, и оба работают, но просто не уверен, можно ли использовать одно из них, и хотел бы узнать правильный подход.

public function user()
{
   return $this->financialGoal->user();
}

public function user()
{   // had to ignore static analysis error for this but it returns the relationship
    return $this->financialGoal->belongsTo(User::class);
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Судя по вашим отношениям, я предполагаю, что это ваша структура таблицы.

платежи идентификатор Financial_goal_id
финансовые_цели идентификатор ID пользователя
пользователи идентификатор

Ваши первые user отношения по модели Payment ( $this->hasOneThrough(User::class, FinancialGoal::class) ) неверны, поскольку вам нужно обратное ей. Это не очень хорошо документировано в документации Laravel, но если вы поиграете со всеми параметрами метода hasOneThrough, вы сможете достичь своей цели. Отношения с пользователем будут выглядеть так

class Payment extends Model
{
    public function user()
    {   
        return $this->hasOneThrough(User::class, FinancialGoal::class, 'id', 'id', 'financial_goal_id', 'user_id');
    }
}

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

Спасибо за это, получил такое же предложение от ChatGPT и пытался согласовать его с документами. Хотя я не понимаю, почему это инверсия.

Adefowowe 23.07.2024 08:58

@Adefowowe Что касается обратного, возможно, я неправильно выразился. Это похоже на то, что belongsTo является противоположностью hasOne или hasMany, это было мое намерение. Формулировку я взял из этого выпуска

Arun A S 23.07.2024 09:07

Я ожидал, что любая реализация будет следовать документации с точки зрения параметров метода, но это не так. Ключи не соответствуют тому, что указано в документации.

Adefowowe 23.07.2024 09:17

Другие вопросы по теме

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