1

быстрый вопрос, что у меня застряли с часами:CakePHP - MVC Model Associations - Как я могу структурировать эту модель данных?

Для моего проекта веб-сайта cakePHP (с использованием версии 2.0) У меня есть 2 модели. Они немного неясны, поэтому я переведу модель на стандартные модели сообщений блога.

Итак, у меня есть модель «Сообщений» и для многих «категорий».

class Post 
$belongsTo = 'Category' 

class Category 
$hasMany = 'Post' 

Пока все хорошо. Теперь я хочу, чтобы каждая категория имела ровно один (обязательный) «основной пост».

Как бы я связал это?

  • Другая модель «MainPost»? Это кажется излишним, поскольку он будет иметь тот же контент, что и сообщения.
  • Boolean 'is_main' column в сообщениях? Не кажется правильным, поскольку только одна должность каждой категории может быть «главной».
  • Столбец 'mainpost_id' в категориях? Звучит неплохо, но «$ belongsTo» - единственная ассоциация, которая позволяет внешнему ключу находиться в текущем классе. И сказать, что Категория принадлежит To Post, когда противоположное тоже верно, мне кажется неправильным. Также принадлежит Too - это ассоциация «много-к-одному», и я хочу, чтобы это была ассоциация «один-к-одному».

Пожалуйста, помогите мне, [укажите название]. Ты моя единственная надежда. ;)

Редактирование: Я думаю, было бы здорово, если бы существовал способ «hasOne», но имел внешний ключ в том же классе, что и $ hasOne X, а не в другом, как стандартный.

+0

В чем цель 'mainpost'? Быстрое решение состоит в том, чтобы добавить дополнительные поля в таблицу категорий для этой цели, и сделать это, чтобы ваши требования вряд ли изменились (вроде описания категории WordPress?) – Ross

+0

Эй, Росс, это не похоже на описание , Цель этого заключается в том, чтобы иметь вид ребенка-плаката, который отображается, когда другие данные не указаны. Это точно так же, как и все другие сообщения, только что он помечен как ... допустим, «стандарт» для определенной категории. – KonstantinK

ответ

1

Вот одно решение:

[ categories ] 
id 
name 
mainpost_id 

[ posts ] 
id 
category_id 
title 
text 
  • Категория hasMany Сообщение
  • Сообщение belongsTo Категория
  • Категория hasOne MainPost (see code)
+0

Было бы идеально, если бы я мог заставить это работать. Единственная проблема, с которой я столкнулся при попытке этого, заключается в том, что при вызове '$ this-> Category-> find();' в КатегорииController он возвращает 'SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец« Сообщение ».mainpost_id 'в' on clause'', потому что он ожидает, что «mainpost_id» будет в модели Posts, а не в модели «Категории». – KonstantinK

+0

Ну, очевидным решением было бы просто использовать «category принадлежит MainPost» и сохранить остальную часть от вашего существа. По-прежнему звучит неправильно говорить об этом, но он делает то, что нужно на данный момент. Sooo ... спасибо Тью :) Еще, если кто-то может подумать о лучшей альтернативе, отправьте его здесь! – KonstantinK

0

я думаю, что вы используете hasAndBelongsToMany отношения .... подробнее см по этой ссылке http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

+0

hasAndBelongsToMany моделирует отношения «многие-ко-многим», что не совсем то, что описывает OP. – eaj

+0

да, мне не кажется, что в этом случае посты действительно имеют много категорий и наоборот. почта имеет одну категорию, каждая категория имеет одну основную должность. Или что-то я здесь не вижу? – KonstantinK