Laravel Eloquent Отношения внешнего ключа с условием? - PullRequest
0 голосов
/ 30 августа 2018

Я строю форум с темами и комментариями. Обе темы и комментарии могут быть сообщены. Итак, у меня есть 3 модели: Тема, Комментарий и Отчет.

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

$table->increments('id');
$table->string('reported_type');
$table->unsignedInteger('reported_id');

сообщил_типом может быть либо «поток», либо «комментарий», а сообщенный_идид - это идентификатор соответствующего потока.

Сейчас я изо всех сил пытаюсь наладить правильные отношения с красноречием. Потому что в модели «нить» я не могу просто сказать

public function reports()
{
    return $this->hasMany(Report::class, 'reported_id');
}

потому что неясно, принадлежит ли идентификатор комментарию или теме.

Что может быть решением для этого? Я действительно хотел бы использовать одну таблицу отчетов только для простоты.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вам нужно определить полиморфное отношение для такого случая https://laravel.com/docs/5.6/eloquent-relationships#polymorphic-relations

0 голосов
/ 30 августа 2018

Вы можете добавить дополнительные условия в свои красноречивые отношения, например:

public function reports()
{
    return $this->hasMany(Report::class, 'reported_id')->where('reported_type', 'thread');
}

То же самое перейти к другой модели

...