@lexstile

Как сделать из сводной таблицы связь one to one?

Есть таблица users.
Есть таблица projects.
Есть сводная таблица project_user с полями project_id и user_id.

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

Модель ProjectUser не создана, хотелось бы только ради этой связи и не создавать.
В соседних таблицах такую проблему решал через hasOne, но ему нужно кормить, как я понял, модель.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 3
@iljaGolubev
Всё в доке:
class User extends Model
{
    public function projects(): BelongsToMany
    {
        return $this->belongsToMany(Project::class);
    }
}

class Project extends Model
{
  public function scopeActive(Builder $query): void
  {
     $query->where('active', 1);
  }
}

dump(User::find(1)->projects()->active()->get());
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
Sometimes a model may have many related models, yet you want to easily retrieve the "latest" or "oldest" related model of the relationship. For example, a User model may be related to many Order models, but you want to define a convenient way to interact with the most recent order the user has placed. You may accomplish this using the hasOne relationship type combined with the ofMany methods:

https://laravel.com/docs/master/eloquent-relations...
Ответ написан
Комментировать
iMedved2009
@iMedved2009
Не люблю людей
Как то так
public function project(): HasOne 
    {
        $instance = $this->newRelatedInstance(Project::class);
        $relation = new HasOne($instance->newQuery(), $this, DB::raw('project_user.user_id'), $this->getKeyName());

        return $relation->leftJoin('project_user', 'project_user.project_id', '=', 'projects.id');
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@v__V__v
Разработчик
А можно поинтересоваться, зачем вам нужна сводная таблица project_user с полями project_id и user_id? Не проще ли будет в таблицу projects добавить поле project_owner?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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