2011-10-04 6 views
0
class Model_Category extends ORM 
{  
    protected $_has_many = array(
     'film' => array('through' => 'films_categories') 
    ); 
} 

class Model_Film extends ORM 
{   
    protected $_has_many = array(
     'categories' => array(
      'through' => 'films_categories' 
     ), 
} 


films 
-id (pk) 
-title 
-description 

categories 
-id (pk) 
-name 

films_categories 
-film_id 
-category_id 

내 테이블이 여기에 어떻게 보이고 이것은에서 찾을 수있는 방법 기록은 내가해야 할 일이다 '카테고리 테이블의 카테고리 중 하나' 이 작업을 수행하는 간단한 방법은 무엇입니까?Kohana (ORM) 2 개 테이블

답변

0

제목과 카테고리별로 영화를 만들려고하십니까? 당신이 쿼리 빌더에서 다음 더 많은 혜택을 누릴 수 없습니다 때문에 나는 혼자이 쿼리에 대한 ORM을 떠날 것 :

$films = DB::select() 
    ->from('films') 
    ->where('title', '=', $my_title) 
    ->and_where($category_name, 'IN', DB::select()->from('categories')->execute()->as_array('id', 'name')) 
    ->execute(); 
+0

작동하지 않습니다. $ category_name은 변수가 아닌 열 이름으로 처리됩니다. 나는 이것과 비슷한 테이블을 얻을 필요가있다 : 가입 후 http://www.w3schools.com/sql/sql_join_left.asp – swoorn

0

내가 대답을 발견했다. 카테고리 이름 (또는 많은 카테고리 이름)으로 영화를 찾고 싶기 때문에 조금 다릅니다. category_id로 영화를 찾는 것이 더 쉬웠습니다. 누군가가 도움이된다고 여기에서 알게되면 :

$category_id = 13; 

$films = ORM::factory('film') 
      ->select('category_id') 
      ->join('films_categories') 
      ->on('films_categories.film_id', '=', 'film.id') 
      ->where('category_id', '=', $category_id) 
      ->find_all(); 


foreach($films as $f) 
    echo $f->title . " " . $f->category_id . "<br/>"; 

정확히 어떻게 작동하는지 알지 못합니다. 나는 이것을 우연히 발명했다.

->select('category_id') 

또는

->select('*') 

을이 그것을 제공 라인과 오류없이 :

Kohana_Exception [ 0 ]: The category_id property does not exist in the Model_Film class 

이유 (참여)하지 않는이 라인이 필요한 이유 누군가가 내게 말할 수 그리고 경우 select ('*')없이 전체 테이블을 조인 할 수 있습니까?

$films = ORM::factory('film') 
    ->join('films_categories')->on('films_categories.film_id', '=', 'film.id') 
    ->join(array('categories', 'category'))->on('category.id', '=', 'films_categories.category_id') 
    ->where('film.title', '=', $film_title) 
    ->where('category.name', '=', $category_name) 
    ->find_all(); 

을 그리고 난 당신이 열 테이블을 지정하지 않은 원인, 쿼리에

->select('category_id') 

필요 추측 : 당신은 여전히 ​​카테고리 이름으로 영화를 필터링 할 경우

0

이 작동합니다 당신의 진술서에 좋아요 :

->where('films_categories.category_id', '=', $category_id)