Я немного много о том, что делать в ОО/DB отношения ...единой ссылки на несколько объектов
Вот модель DB:
CREATE TABLE User
Id
CREATE TABLE Location
userId
// EDIT oups, wrong !
// placeId
// Should be :
seatId
CREATE TABLE Game
locationId
Теперь некоторый код:
class User
{
private Location locations[]; // need this for several reasons...
public function loadFromDatabase()
{
// Load data from DB
// ...
result = DB::query("SELECT Id FROM Locations WHERE userId="+this->Id);
foreach(result)
{
l = new Location();
l->loadFromDatabase(result);
locations[] = l;
}
}
}
class Location
{
private User user;
public function loadFromDatabase()
{
...
}
}
class Game
{
private Location location;
public loadFromDatabase()
{
/*
Here comes the problem :
how to have a reference to a location
created by the User class ?
*/
}
}
A Пользователь игры Игры в нескольких местах. EDIT: И для каждого местоположения пользователь играет на сиденье. Или на другом месте ... Когда я хочу знать, где игра была сыграна, я обращаюсь к Game.location. И когда я хочу узнать, кто играл в нее, я получаю доступ к Game.location.user
Вот моя проблема: я хочу, чтобы Game.location была той же ссылкой на одну из User.locations, и я не знаю, как для этого ... И, во всем мире, я чувствую, что что-то не так в моем коде ...
Любая помощь? Благодаря
Благодарим вас за ответ. Ты дал мне то, что мне нужно. Я не дал никаких подробностей, и я неправильно писал имена классов. Вместо placeId, вы должны прочитать seatId. Пользователь может играть в игру в месте на одном зарезервированном месте и играть в том же месте на другом зарезервированном месте. Но то, что вы рассказали о статической карте, именно то, что мне нужно: таким образом я могу сохранить уникальные экземпляры. Кстати, есть ли какой-либо шаблон дизайна в соответствии с этим способом? – Antoine
Добавлены некоторые ссылки. Что касается отношения к игре/местоположению, это звучит так, как будто это один к одному, поэтому, возможно, нет необходимости разделять их. Вместо этого у вас может быть таблица с параметрами 'game_id',' user_id' и 'place_number', чтобы связать игры с пользователями и их номерами мест и иметь массив (фиксированный размер?) В объекте' Game', связывающем пользователей. – aaz
Спасибо за ссылки, это именно то, что мне нужно.В большинстве случаев у меня есть решения для моих проблем, но я никогда не уверен, что они «хорошо закодированы». Вот почему я люблю писать код на основе шаблонов дизайна. И ваши объяснения + ссылки выполняют эту работу! – Antoine