Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii活动记录-关系表中的位置_Php_Mysql_Activerecord_Yii - Fatal编程技术网

Php Yii活动记录-关系表中的位置

Php Yii活动记录-关系表中的位置,php,mysql,activerecord,yii,Php,Mysql,Activerecord,Yii,我的mysql数据库中有以下表格: category (id,name, url) recipe_categories (category_id, recipe_id) recipes (id, name, description) 我想实现的SQL语句如下所示: SELECT * FROM recipes r INNER JOIN recipe_categories cr ON cr.recipe_id = r.id INNER JOIN category c ON c.id = cr.c

我的mysql数据库中有以下表格:

category (id,name, url)
recipe_categories (category_id, recipe_id)
recipes (id, name, description)
我想实现的SQL语句如下所示:

SELECT * FROM recipes r 
INNER JOIN recipe_categories cr ON cr.recipe_id = r.id
INNER JOIN category c ON c.id = cr.category_id
WHERE c.url = "google.de"
这两种模式:

<?php
class RecipeCategoryModel extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'recipe_categories';
    }


    public function relations()
    {
        return array(
            'recipes'   => array(self::MANY_MANY ,      'RecipeModel',      'recipe_has_categories(recipe_category_id,recipe_id)'),
        );
    }

    public function getActive() {
        return RecipeCategoryModel::model()->with(array(
            'recipes'=>array(
                'joinType'=>'INNER JOIN',
            ),
        ))->findAll();
    }
}

?>


<?php
class RecipeModel extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'recipes';
    }

    public function relations()
    {
        return array(
            'categories'    => array(self::MANY_MANY ,      'RecipeCategoryModel',      'recipe_has_categories(recipe_id,recipe_category_id)'),
        );
    }

    public function getMainImage() {

    }

}

?>


问题是WHERE子句。我如何使用ActiveRecord(with(),CDbCriteria,…)实现这一点?

在考虑这个问题的答案时,我不得不稍微清理一下您的db表和模型名称,因为提供的代码在测试时导致了一些错误。但是我已经能够生成您想要的SQL语句了——但是请记住,当使用Yii的ActiveRecord时,它使用自己的语法和表别名

我得到的结果是:

SELECT `t`.`id` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`description` AS `t0_c2`, `categories`.`id` AS `t1_c0`, `categories`.`name` AS `t1_c1`, `categories`.`url` AS `t1_c2`
FROM `recipe` `t` 
INNER JOIN `recipe2category` `categories_categories` ON (`t`.`id`=`categories_categories`.`recipe_id`) 
INNER JOIN `category` `categories` ON (`categories`.`id`=`categories_categories`.`category_id`) 
WHERE (categories.url = 'google.de')
要在Yii CActiveRecord调用中获取WHERE语句,需要在CDbCriteria或FindAll()参数中添加“条件”或“比较”。看到和

例如:

$Criteria = new CDbCriteria;
$Criteria->with = array(
'categories' => array(
    'joinType' => 'INNER JOIN'
    ),
);
$Criteria->condition = 'categories.url = :url';
$Criteria->params = array(
    ':url' => 'google.de',
);

$Recipes = Recipe::model()->findAll($Criteria);
但要使代码正常工作,您需要我清理的db表和模型:

TABLE recipe - id, name, description
TABLE recipe2category - category_id, recipe_id
TABLE category - id, name, url
Model Recipe.php:

<?php
class Recipe extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'recipe';
    }

    public function relations()
    {
        return array(
            'categories'    => array(self::MANY_MANY , 'RecipeCategory', 'recipe2category(recipe_id,category_id)'),
        );
    }
}

?>

Model RecipeCategory.php:

<?php
class RecipeCategory extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return 'category';
    }

    public function relations()
    {
        return array(
        'recipes'   => array(self::MANY_MANY , 'Recipe', 'recipe2categoy(category_id,recipe_id)'),
        );
    }
}

?>


希望这有用。

您是否在phpmyadmin中运行了此查询?否。这只是一个示例。我只想表明,我需要“在哪里”子表。你的问题到底是什么?您的查询中是否有任何错误?抱歉,我忘了写我想用活动记录实现这一点。请发布您的Yii PHP模型(必须定义它们之间的关系)