: 내가 처음 일을 실행할 경우둘 이상의 인스턴스간에 JOIN 결과를 공유하려면 어떻게해야합니까?
1- SELECT ... FROM cities JOIN states ON city.stateID = state.stateID WHERE city.cityID = ...
2- SELECT ... FROM cities WHERE city.cityID = ...
3- SELECT ... FROM states WHERE state.stateID = ...
것은, 내가 필요하지 않습니다를 (아마도) 두 번째도 아니고 두 번째 쿼리도 실행해야합니다. 왜냐하면 이미 데이터가 있기 때문입니다.
하지만 둘 이상의 인스턴스 클래스간에 단일 조인 쿼리의 결과를 어떻게 공유 할 수 있습니까? 그리고 세 번째 쿼리를 먼저 사용해야한다고 가정 해 봅시다. 세 번째 데이터가 이미 있으므로 City 인스턴스를 코드에서 어떻게 제어할까요?
<?php
class City
{
protected $state;
function getState()
{
if(!$this->state)
$this->state = State::getByID($this->stateID);
return $this->state;
}
// since i may already have (in the outer scope) the $state instance...
// to avoid an unnecessary query (State::getByID()) i allow to set the state:
function setState(State $state)
{
if($state->stateID == $this->stateID)
$this->state = $state;
else
throw new Exception("This City doesn't belong to the given State");
}
}
이 정확합니까? 내가 옳은 일이야?
예를 들어, 나는 이런 "주소"의 생성자를 만들 수 있습니다 ... 실제로
<?php
class Address
{
const PREFETCH_CITY = 1;
const PREFETCH_STATE = 2;
const PREFETCH_ALL = 3;
construct($cityID, $prefetch = 0)
{
if($prefetch & static::PREFETCH_CITY)
// i use the "JOIN cities" query (i also set $this->city)
elseif($prefetch & static::PREFETCH_STATE)
// i use the "JOIN states" query (i also set $this->state)
elseif($prefetch & static::PREFETCH_ALL)
// i use the "JOIN states JOIN cities" query
// (i preset also both $this->city and $this->state)
else
// i don't use any JOIN, i just get the city
}
}
지금은 별도의 클래스에 있어야하는 생성자를 생각하고 있지만, 무엇을
일반적으로 말하는 ... 나는이 논쟁에 대해 무엇을 읽을 수 있습니까? 주소 클래스를 호출 할 것이다 인스턴스와 도시 클래스는 지금까지 책, 튜토리얼 내 영어 끔찍한 분명 한 것으로
희망을 환영합니다 ... 아주 사전 :
PHP를 모르면이 질문에 답하지 않겠지 만 결과에 스마트 캐싱이 필요한 것처럼 들립니다. 하지만 PHP 라이프 사이클이 어떻게 작동하는지 알지 못하기 때문에 PHP에서 구현할 수있는 방법이나 PHP 자체에서 구현할 수있는 방법을 알려줄 방법조차 모릅니다. – Pete
실제로 PHP와 관련이 없으므로 다른 언어도 사용하므로이 문제에 대한 일반적인 접근 방식을 찾고 있습니다 – skyline26
전체 아키텍처를 설명하고 싶을 수도 있습니다. 그렇지 않으면 일반적인 아이디어를 넘어 조언을하기가 어렵습니다. – Pete