Кажется, я не могу найти прямого ответа на вопрос, могут ли модели Eloquent иметь несколько отношений принадлежности.
Только с точки зрения нормализованных отношений с БД это совершенно верно. Возьмем гипотетический пример страницы CMS, которая принадлежит одному и только одному автору, а также принадлежит одной и только одной категории. Автор и категория не связаны друг с другом и не связаны друг с другом. В БД мы просто ожидаем, что страница будет иметь поля author_id и category_id, каждое из которых имеет внешний ключ к другой таблице.
Кажется, было бы правильно сделать:
class Page extends Model
{
public function author()
{
return $this->belongsTo(Author::class);
}
public function category()
{
return $this->belongsTo(Category::class);
}
}
Сценарий кажется действительным ... ЗА ИСКЛЮЧЕНИЕМ того, что это, кажется, нарушает соглашение и автоматическую магию методов associate и dissociate, которые ожидают, что будет только одно отношение «принадлежит».
Так правильно ли использовать несколько отношений belongsTo в одной и той же модели? А если нет, то как бы вы вместо этого описали такой распространенный сценарий? (Я должен сразу же отметить, что это не тот же сценарий, что и полиморфные отношения, где одна модель принадлежит другой, которая может быть того или иного типа.)
Нет, containsToMany используется для определения отношений «многие ко многим», для чего требуется таблица связывания. Это вопрос о ДВУХ разных отношениях один ко многим.
как насчет этих ДВУХ разных отношений? что насчет них? ... также, что вы имеете в виду, "что предполагает наличие только одного отношения "принадлежит"? ... у вас может быть столько отношений "принадлежит", сколько у вас есть внешних ключей в таблице, ограничений нет
«у вас может быть столько отношений ownTo, сколько у вас есть внешних ключей в таблице, ограничений нет». Что ж, это отвечает на мой основной вопрос, если вы МОЖЕТЕ это сделать. Однако как насчет метода associate? Вы знакомы с ним? laravel.com/docs/9.x/… Что делать associate, когда существует несколько отношений принадлежности?
associate и dissociate вызываются отношениями, а не самой моделью






Eloquent Model может иметь несколько одинаковых отношений. Это означает, что вы можете иметь belongsToMany() столько, сколько вам нужно, вы можете иметь belongsTo(), hasOne(), hasMany() и т. д. Это не повлияет на другие отношения, поскольку у них другое имя метода. что является основной идентификацией для отношений.
Сценарий кажется действительным ... ЗА ИСКЛЮЧЕНИЕМ того, что это, кажется, нарушает соглашение и автоматические методы ассоциирования и диссоциации, которые ожидают, что будет только одно отношение «принадлежит».
Если вы понимаете документацию Обновление отношения BelongsTo, вы будете использовать associate() или dissociate() после метода отношения. В документации нет "except there to be only a single belongs to relationship"..
$page->author()->dissociate(); // it will set the "author_id" on the page as null and will not affect the `category()` at all.
$page->category()->associate($category); // it will add a the "category_id" of the given category to the page and will not affect the `author()` at all.
Д'о. Я читал документацию, так как метод вызывается непосредственно в модели. Тогда много шума из ничего! Спасибо!
вы имеете в виду отношения «принадлежит многим»?