2011-07-31 3 views
0

사용자 정보가 포함 된 3 개의 표가 있습니다. 하나는 학생용이고 다른 하나는 교사 용이고 다른 하나는 관리자 용입니다.

그들은 어떤 식 으로든 관련이 없습니다. 관리자를위한 대시 보드를 만들지는 않았지만 학생과 교사 목록이 나타납니다.

이 방법을 찾은 유일한 방법은 관리자 컨트롤러에서 $uses 변수를 사용하는 것입니다. 그러나 나는 많은 곳에서 이것이 나쁜 습관이라고 읽었다.

모든 솔루션?

답변

3

또 다른, 어쩌면 더 나은 방법은 ClassRegistry::init('MyModel')->myMethod() (more reading @ Cake API)의 사용

이는 loadModel 또는 uses 반대로이 모델은 싱글로 처리됩니다 ClassRegistry으로, 사용되는 경우 개체를로드합니다.

- 당신이 뭔가 잘못하고있다

: 당신은 현재 컨트롤러와는 아무 상관이없는 모델에 액세스해야합니다.

당신은 하나의 컨트롤러에서, 당신의 모델 데이터의 모든에 액세스 할 필요 조건을 충분히, 그러나 결코 규칙을 깨지 않고 그것을 수행하는 방법에 대한 명확한 답이있다!

+0

더 나은 방법은 아닙니다 .. 여기는 말의 입에서 나온 것입니다 : https://groups.google.com/forum/#!msg/cake-php/E3xXtOsBAxc/mMfAOBBFTHkJ –

2
당신은 항상 그런 다음에 의해 새로운로드 모델에 액세스 할 수 있습니다

$this->loadModel('NewModelName'); 

를 사용하여 관련되지 않은 다른 모델 사용할 수 있습니다

:

$this->NewModelName->add(); // whatever method model has defined 

왜 사용을 통해 loadModel()를 선호를?

성능을 향상 시키려면. 어떻게?은 loadModel 함수 자체를 호출하여 uses 배열에 지정한 모든 모델을로드합니다. 그러나 문제는 오직 하나의 행동 만이 특정 모델을 필요로한다면, 모든 행동에 그것을 포함시키는 것이 좋은 것입니다. 예 : add() 액션에만 관련이없는 모델이 필요하지만 uses 배열에서 지정한 경우 어떤 액션이 호출 되더라도 완전히 관련없는 모델이로드 될 것입니다. 간단히 말하면 비효율적입니다. C 프로그램에서 변수를 선언했지만 결코 사용하지 않은 것처럼 말입니다. C 컴파일러의 경우에는 변수를 사용하지 않는다는 경고 메시지가 표시되지만 불행히도 케이크는 말할 수 없습니다.

모든 동작이 해당 모델을로드해야하는 경우 사용하는 것이 좋으며, 그렇지 않으면 loadModel()을 사용하십시오.

+0

이 방법과 $ uses 메서드의 차이점은 무엇입니까? – AlexBrand

+0

'$ uses'은 나쁜 습관입니다! –

+1

축하해? – AlexBrand

1

당신은 아마 내가 사용자 정보를 포함 3 표, 학생들을위한 하나, 교사를위한 하나와 관리자에 대한 하나가

다른 질문 : 내 대답을) 읽어 보지 않았다. 그들은 어떤 식 으로든 관련이 없습니다. 관리자를위한 대시 보드를 만들지는 않았지만 학생과 교사 목록이 나타납니다.

문제는 비슷한 데이터를 3 개의 다른 테이블 (이 경우 사용자 정보)으로 분리하는 것입니다. 따라서이 데이터를 관리하려고하면 벽돌 벽에 부딪 힙니다. 관계를 3 개의 테이블에서 분리하면 관계가 사라지기 때문입니다.

이 방법을 찾은 유일한 방법은 관리자 컨트롤러에서 $ uses 변수를 사용하는 것입니다.

컨트롤러에 대한 잘못된 생각이 있습니다. 각 컨트롤러는 특정 모델 (및 관련 모델)의 데이터 흐름을 관리합니다. 그것은 당신이 관리 할 일을하기 위해 Admin 컨트롤러에 있어야한다는 것을 의미하지는 않습니다. 당신이 조작 할 어떤 모델은 당신이 할 필요가 무엇인지 컨트롤러를 결정합니다.

을 그러나, 나는이 나쁜 관행 많은 장소에서 읽었습니다.

이제 $ uses를 사용하는 것은 잘못된 일을하는 빨간색 플래그입니다. 현재 컨트롤러와 관련이없는 모델에 액세스해야합니다. 이제 프로그래밍에서 항상 예외가 있습니다. 때로는 해당 모델에 대한 액세스 권한이 필요합니다. 그것이 loadModel이 나오는 곳입니다. 드물기 때문입니다. 모델이 많이 필요하다면, loadModel을 많이 호출해야하는데, 이는 비용이 많이 드는 부분이지만, 앱 디자인에 문제가 있음을 의미합니다 :))

그래서, 당신은 $ uses를 사용하여 나쁜 결정의 징조라고 말할 수있다 (DB 디자인이나 애플리케이션 구조에서); 그래서 loadModel을 많이 사용하고 있습니다.

편집 : Any solutions? 다른 질문에서 한 가지 해결책을 제시했습니다. 그러나 한 곳에서 모든 것을 가지고 싶다면 사용자 정보가있는 1 명의 사용자 테이블을 가질 수 있습니다. 각 사용자는 한 명의 학생, 교사, 관리자 및 '그룹'필드를 사용하여 사용자 그룹을 결정할 수 있습니다. 세 번째 솔루션은 $ uses를 사용합니다. 성능에 미치는 영향은 실제로 문제가되지 않습니다. 하지만 앱을 더 개발할 때 꽤 복잡한 일이 될 것입니다. 그것이 당신이 걱정해야 할 것입니다. 예를 들어, Auth를 사용하는 경우 세 가지 모델로 작동하려면 공정한 비트로 조정해야합니다. users 테이블을 사용하면 훨씬 쉬울 것입니다.

+0

그래서 단일 사용자 테이블을 가지고 있고 기본적으로 id 열과 user_id 열을 가질 학생, 교사 및 관리 테이블이 있다고 말하는 것입니까? 오히려 현재 디자인을 유지하고 학생과 교사 컨트롤러에서 관리자 작업을 만든 다음 아약스를 사용하여 한 페이지에서 모두 사용할 수 있습니까? – AlexBrand

+0

첫 번째 질문에 예.2nd의 경우 : 현재 디자인을 유지한다면 admin 컨트롤러에서 $ uses를 사용하는 것이 가장 간단합니다 (성능 영향에 대해 걱정하지 마십시오). 나는 당신의 신발에 장기적으로 무엇이 최선인지를 알지 못하고 모든 해결책이 허용 범위 내에 있습니다. 그래서 당신이 사용하기를 좋아하는 것을 고르십시오. –

관련 문제