2011-10-04 21 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個表

​​

我需要找到具有$ my_category =記錄'類別表中的任何類別'。任何簡單的方法來做到這一點?

回答

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 

爲什麼參加()不無需選擇('*')連接整個表?

0

如果你仍然想過濾掉類別名稱電影這應該工作:

$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') 

在您的查詢,因爲你不指定列的表在你的where語句中。像這樣:

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