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

これが私のテーブルの外観であり、これが私がする必要があることです:

$films->ORM::factory('film');
$films
    ->where('title', '=', $my_title)
    ->and_where('any of categories name', '=', $category_name)
    ->find_all();

$ my_category='カテゴリテーブルのカテゴリのいずれか'を持つレコードを見つける必要があります。これを行う簡単な方法はありますか?

4

3 に答える 3

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)
于 2011-10-07T13:00:34.280 に答える
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();
于 2011-10-04T17:57:03.520 に答える
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

join() が select('*') なしでテーブル全体を結合しないのはなぜですか?

于 2011-10-05T12:04:27.827 に答える