Поскольку у вас есть placeId
в вашей таблице Location
, я предполагаю, что есть таблица Place
, которая описывает, каковы места на самом деле, в то время как таблица Location
просто представляет отображение "многие ко многим" междупользователи и места.
В этом случае Location
не обязательно должен иметь собственный Id
и не должен быть классом, но Place
делает.
Чтобы загрузить только один экземпляр каждого объекта из базы данных, кэшируйте экземпляры в статической карте внутри каждого класса.
class Place
{
// Static
private static Place loadedPlaces[];
public static function get(id)
{
if (!loadedPlaces[id])
{
loadedPlaces[id] = new Place(id);
loadedPlaces[id]->loadFromDatabase();
}
return loadedPlaces[id];
}
// Non-static
private id;
public function loadFromDatabase()
{
// ...
}
}
Затем, чтобы получить ссылки на места для свойств пользователя или игры,вы просто получаете к ним доступ через статический метод.
class User
{
public function loadFromDatabase()
{
result = DB::query("SELECT placeId FROM Locations WHERE userId="+this->Id);
foreach(result)
{
places[] = Place::get(result);
}
}
}
class Game
{
public function loadFromDatabase()
{
place = Place::get(place);
}
}
Используется: